程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu1671Phone List - 字典樹

hdu1671Phone List - 字典樹

編輯:C++入門知識

hdu1671Phone List
簡單的字典樹
空間換時間,花銷超大,,,如果有多組數據的話 呃
那用完就釋放吧 , 恩 。
[cpp] 
#include<iostream> 
using namespace std; 
 
struct trie 

    bool exist; 
    int num; 
    trie *next[10]; 
    trie() 
    { 
        exist=0; 
        num=0; 
        for(int i=0;i<10;i++) next[i]=0; 
    } 
} *root; 
 
bool insert(trie *p,char *s) 

    int k=0; 
    while(s[k]!='\0') 
    { 
        if(!p->next[s[k]-'0']) p->next[s[k]-'0']=new trie; 
        p=p->next[s[k++]-'0']; 
         
        if(p->exist) return 0;            //如果此前綴為電話號碼,,輸出"NO" 
        p->num++; 
    } 
    p->exist=1; 
    if(p->num>1)  return 0;               //之前有號碼路過的說,, 
     
    return 1; 

 
void Free(trie *p) 

    for(int i=0;i<10;i++) 
        if(p->next[i]) Free(p->next[i]); 
    if(p)  delete p; 

 
int main() 

    int T,n,i; 
    bool Success; 
    char t[11]; 
    scanf("%d",&T); 
    while(T--) 
    { 
        root=new trie; 
        Success=1; 
        scanf("%d",&n); 
        for(i=1;i<=n;i++) 
        { 
            scanf("%s",t); 
            if(!insert(root,t)) {Success=0; i++;break;} 
        } 
        for(;i<=n;i++) scanf("%s",t); 
        printf(Success?"YES\n":"NO\n"); 
        Free(root); 
    } 
    return 0; 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved