POJ 2001 字典树裸模版

来源:互联网 发布:土巴兔云设计软件 编辑:程序博客网 时间:2024/05/01 10:02
再做几个字典树就去AC自动机...... 加油!

用模板感觉不错啊!!细节细节!!

#include<iostream>#include<string>#include<cstdio>#define MAX 26using namespace std;struct TireNode{       int nCount;       TireNode *next[MAX];};TireNode Memeroy[1111111];int allocp=0;void InitTireRoot( TireNode **pRoot ){     *pRoot=NULL;}TireNode *CreateTire(){         int i,k;         TireNode *p=&Memeroy[allocp++];         p->nCount=1;         for( i=0;i<MAX;i++ )              p->next[i]=NULL;         return p;}void InsertTire( TireNode **Root,char *s ){     int i=0,k;     TireNode *p;     if( !(p=*Root) )         p=*Root=CreateTire();          while( s[i] )     {            k=s[i++]-'a';            if( p->next[k] )                p->next[k]->nCount++;            else                p->next[k]=CreateTire();            p=p->next[k];      }} void SearchTire( TireNode **Root,char *s ){    int i=0,k;    TireNode *p=*Root;    while( s[i] )    {           printf( "%c",s[i] );           k=s[i++]-'a';            if( p->next[k] && p->next[k]->nCount==1 )               return ;           p=p->next[k];    }}int main(){    //freopen( "write.out","w",stdout );    //freopen( "read.in","r",stdin );    TireNode *Root;    InitTireRoot(&Root);     int k=0;    char s[1111][22];        while( scanf("%s",s[k])!=EOF )           InsertTire(&Root,s[k++]);        for( int i=0;i<k;i++ )    {         printf( "%s ",s[i] );         SearchTire(&Root,s[i]);         printf( "\n" );     }        return 0;} 


原创粉丝点击