poj 3630 Phone List
2011-07-22 15:16
302 查看
// 题意: 给一组互不相同的号码,问其中是否有号码是另一号码的前缀 #include <iostream> // trie树 using namespace std ; struct Node { Node *next[10]; //数字0-9 int vis; //记录该节点所代表的号码是否有被访问过 }table[100000]; Node *root; int cur; void init() { root=&table[0]; cur=1; for(int i=0;i<10;++i) root->next[i]=NULL; root->vis=0; //trie树的根结点不包含信息 } int prefix(char ch[]) //若出现前缀情况则返回 1 { Node* p=root; int tag=1; //假定存在前缀 for(int i=0;ch[i];++i) { int j=ch[i]-'0'; if(p->next[j]==NULL) //说明不可能存在前缀 { tag=0; Node* q=&table[cur++]; for(int k=0;k<10;++k) q->next[k]=NULL; q->vis=0; p->next[j]=q; } p=p->next[j]; //继续搜索下去 if(p->vis) //说明存在前缀 return 1; } p->vis=1; return tag; } int main() { int cases,n; cin>>cases; while(cases--) { init(); int suc=1; char ch[11]; cin>>n; while(n--) { scanf("%s",ch); if( suc && prefix(ch) ) suc=0; } if(suc) printf("YES\n"); else printf("NO\n"); } return 0 ; }
相关文章推荐
- poj 3630 Phone List (字典树)
- [字典树 ] poj 3630 Phone list
- POJ 3630 Phone List(字典树,公共前缀问题)
- POJ 3630 - Phone List (Trie树)
- POJ 3630 Phone List
- POJ——3630 Phone List
- POJ 3630 Phone List
- POJ-3630 Phone List
- poj 3630 Phone List
- POJ 3630 HDU 1671--Phone List【string】
- Phone List--POJ 3630
- poj --3630 Phone List 字典树
- Phone List POJ - 3630 (字典树或string)
- poj - 3630 Phone List
- poj 3630(Phone List )
- POJ3630 Phone List
- poj 3630 phone list
- POJ 题目3630 Phone List(字符串,水)
- poj 3630 Phone List Trie树
- Phone List POJ 3630 Trie Tree 字典树