zoukankan      html  css  js  c++  java
  • hdu2027 trie树 字典树模板

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <sstream>
    using namespace std;
    
    #define Max 26
    
    const int maxn=100000;
    
    typedef struct TrieNode{
        int nCount;//根据需要改变
        struct TrieNode *next[Max];
    }TrieNode;
    
    TrieNode *root=NULL;
    
    int allcop=0,ans,flag;
    
    TrieNode memory[maxn];
    
    TrieNode *CreatTrieNode(){
         TrieNode *temp=&memory[allcop++];
         temp->nCount=0;
         for(int i=0;i<Max;i++) temp->next[i]=NULL;
         return temp;
    }
    
    void InsertTrie(TrieNode **pRoot,char *str){
          TrieNode *temp=*pRoot;
          int i=0,k;
          while(str[i]){
            k=str[i]-'a';
            if(temp->next[k]){
                    //temp->next[k]->nCount++;
            } else temp->next[k]=CreatTrieNode();
            temp=temp->next[k];
            i++;
          }
          temp->nCount++;
    }
    
    int SearchTrie(TrieNode *root,char *str){
        if(root==NULL) return 0;
        TrieNode *temp=root;
          int i=0,k;
          while(str[i]){
            k=str[i]-'a';
            if(temp->next[k]){
                    temp=temp->next[k];
            } else return 0;
            i++;
          }
          return temp->nCount;
    }
    
    void Traverse(TrieNode *root){
         for(int i=0;i<Max;i++){
            if(root->next[i]){
                    if(root->next[i]->nCount>0) ans++;
                    Traverse(root->next[i]);
            }
         }
    }
    
    char str[1010];
    
    void init(){
      ans=0;
      flag=0;
      allcop=0;
      memset(memory,0,sizeof(memory));
      root=CreatTrieNode();
    }
    
    int main()
    {
        while(1){
            init();
            string line;
            getline(cin,line);
            stringstream ss(line);
            while(ss>>str) {
            if(str[0]=='#') {
                    flag=1;
                    break;
            }
            InsertTrie(&root,str);
            }
            if(flag) break;
            Traverse(root);
            printf("%d
    ",ans);
        }
        return 0;
    }

    输入方式值得学习

  • 相关阅读:
    关闭Pinterest通知
    android——创建camera应用(译)
    Android样式——Styles
    Android Fragment学习(一)
    Win32汇编环境配置
    关于微信检测SDK应用的原理浅析(iOS)
    iOS的Mantle实战
    Objective-C运行时的一些技巧
    Autolayout入门教程
    基于RAC的通用TableView
  • 原文地址:https://www.cnblogs.com/GeniusYang/p/5547815.html
Copyright © 2011-2022 走看看