简单字典树练习

题目:http://acm.hdu.edu.cn/showproblem.php?pid=1251

 

这个相当简单就不解释了。

直接上代码。

 

View Code
#include "iostream"

#include "cstdio"

#include "cstring"

#include "string"

using namespace std;

typedef struct node{

    int Cross;

    struct node *next[26];

}node;

node *head;

void InitHead(){

    head = (node *)malloc(sizeof(node));

    head->Cross = 0;

    memset(head->next, NULL, sizeof(head->next)); 

}

void Build(char *word){

    node *p = head;

    int i, k, Len = strlen(word);

    for(i=0; i<Len; i++){

        k = word[i]-'a';

        if(p->next[k]==NULL){

            p->next[k] = (node*)malloc(sizeof(node));

            p->next[k]->Cross=1;

            memset(p->next[k]->next, NULL, sizeof(p->next[k]->next));

        }else{

            p->next[k]->Cross++;

        }

        p = p->next[k];

    }

}

int Find(char *pre){

    node *p = head;

    int i, k, Len = strlen(pre);

    for(i=0; i<Len; i++){

        k = pre[i]-'a';

        if(p->next[k]==NULL) return 0;

        p = p->next[k];

        if(i==Len-1){

            return p->Cross;

        }

    }

}

int main(){

    char word[15];

    InitHead();

    while(gets(word), strcmp(word, "")!=0){

        Build(word);

    }

    while(gets(word)){

        printf("%d\n",Find(word));

    }

}

你可能感兴趣的:(字典树)