POJ 2001 字典树裸模版

再做几个字典树就去AC自动机...... 加油!

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

#include<iostream>
#include<string>
#include<cstdio>
#define MAX 26
using 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;
} 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值