这是学习AC自动机的第一步,包括用指针构造树结构的demo,这个程序将会大有用处。
struct node{ node* next[26]; node* fail;//fail指针是AC自动机里需要用到的 int sum; //当然也可以添加其他任何需要的信息 }; node* New(){//建立指针新节点的demo node*nod=(node*)malloc(sizeof(struct node)); rep(i,0,25)nod->next[i]=0; nod->sum=0;nod->fail=0; return nod; } node*root=New();//建立根节点(trie树的根节点没有任何信息) void Insert(char*s){ node*p=root; int len=strlen(s); rep(i,0,len-1){ int x=s[i]-'a'; if(p->next[x]==NULL)p->next[x]=New(); p=p->next[x]; } p->sum++; } bool Find(char*s){ node*p=root; int len=strlen(s); rep(i,0,len-1){ int x=s[i]-'a'; if(p->next[x]==NULL)return false; p=p->next[x]; } return p->sum; }