
ACM
imyyy_
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。
展开
-
KMP算法
KMP算法是一种字符串模式匹配算法,找到主串中是否存在与子串相同的另一个子串; void get_next(string T, int next[]) { //next数组 int i = 1, j = 0; next[1] = 0; while (i < T.size()) { if (j == 0 || T.ch[i] == T.ch[j]) { i++; j++; next[i] = j; } else j = next[j]; } } int KM.原创 2020-09-11 07:32:28 · 205 阅读 · 0 评论 -
字典树 Trie
#include<string> #include<iostream> using namespace std; struct node { node* nxt[26]; int flag; node() { for (int i = 0; i < 26; i++) nxt[i] = nullptr; } }; node* root; void init() { root = new node(); } void ins(string s) { int原创 2021-04-23 16:44:21 · 213 阅读 · 0 评论 -
最小生成树 kruskal,prim
kruskal typedef struct s { int a, b; int weight; }Edge; void kruskal(Graph G, Edge* e, int* parent) { sort(e); //按边的权值进行排序 init(parent); //初始化并查集 for (int i = 0; i < G.num; i++) { int a_root = find(parent, e[i].a); int b_root = find(parent原创 2021-04-22 21:12:03 · 274 阅读 · 0 评论 -
最短路径(dijistra ,floyd)
dijistra const int N = 10; int used[N]; //用没有用过 int path[N]; //i的前一个节点 int dist[N]; //最短路径 void f(Graph G, int v) { for (int i = 0; i < N; i++) { used[i] = 0; dist[i] = G.edge[v][i]; if (G.edge[v][i] < Max) path[i] = v; else path[i] = -1; }原创 2021-04-22 20:08:43 · 239 阅读 · 0 评论