HDU–3407[String-Matching Automata] AC自動機或kmp

來源:互聯網
上載者:User

 思路:弱化的AC自動機,也可以用KMP。

 

PS.在HDU能AC,在POJ一直WA、、、、

 

 

CODE:

/*AC自動機或kmp*//*AC代碼:32ms*/#include <iostream>#include <cstdio>#include <memory.h>#include <algorithm>#include <queue>#define MAXN 100006#define kind 26using namespace std;char word[MAXN];//模式串struct Node{int next[kind],v,fail; }Trie[5*MAXN+10];int snode;//字典樹的總結點數(總狀態數)int N;//模式串數目int cas;void set_node(int x){memset(Trie[x].next,0,sizeof(Trie[x].next));Trie[x].v=0;//表示是否是危險結點Trie[x].fail=0; }void Insert(char s[]){int i=0,pos=0,index;int len=strlen(s);for(i=0;i<len;i++){index=s[i]-'a';if(Trie[pos].next[index]==0){set_node(++snode);Trie[pos].next[index]=snode; }//if(Trie[pos].v)/*危險結點為其子結點不必繼續(剪枝)*///break;pos=Trie[pos].next[index];}//Trie[pos].v++;}void Find_Fail(int pre,int ith,int now){if(!pre)//如果他的父節點是root,fail直接指向root {  Trie[now].fail=0; return;}int temp=Trie[pre].fail;while(temp!=-1){if(Trie[temp].next[ith]!=0){Trie[now].fail=Trie[temp].next[ith];//if(Trie[Trie[temp].next[ith]].v)//注意//Trie[now].v++;return;}temp=Trie[temp].fail; }if(temp==-1)Trie[now].fail=0;return; }queue<int>Q;void Build_AC_Fail(){int i,pos;while(!Q.empty()) Q.pop(); Trie[0].fail=-1; Q.push(0); while(!Q.empty()){pos=Q.front();Q.pop();for(i=0;i<kind;i++){if(Trie[pos].next[i]!=0)//存在就要去找fail指標{Find_Fail(pos,i,Trie[pos].next[i]);Q.push(Trie[pos].next[i]);}else//讓它的next指向pos的fail的nextTrie[pos].next[i]=Trie[Trie[pos].fail].next[i];}}}void Solve(){int i,j;set_node(0);snode=0;Insert(word);Build_AC_Fail();for(i=0;i<=snode;i++){printf("%d",i);for(j=0;j<26;j++)printf(" %d",Trie[i].next[j]);printf("\n");}}int main(){while(scanf("%s",word)!=EOF){if(word[0]=='0') break;Solve();}return 0;}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.