poj_3630 Phone List(Trie树练习)
2016-02-05 23:44
393 查看
【题目】
点击这里
【思路】
基本的Trie树应用,作为回顾练习。判断是否有重号的依据:在建树过程中,找到重复串或者在叶子节点继续插入,当且仅当有重号。
【代码】
点击这里
【思路】
基本的Trie树应用,作为回顾练习。判断是否有重号的依据:在建树过程中,找到重复串或者在叶子节点继续插入,当且仅当有重号。
【代码】
#include <stdio.h> #include <string.h> typedef struct node { char c; int num; int child[10]; } triNode; triNode list[100010]; void newNode(long int t, char ch) { list[t].c=ch; list[t].num=0; } int main() { long int m,y; scanf("%d",&m); for (y=0;y<m;y++) { long int num=0,n,i,j,p,flag=0; char s[11]; newNode(num,'0'); scanf("%d",&n); for (i=0;i<n;i++) { scanf("%s",s); if (flag==0) { int sLen=strlen(s); long int k=0, flag1=0; for (j=0;j<sLen;j++) { if (k>0 && list[k].num==0) {flag=1; break;} int flag2=0,q=0; for (q=0;q<list[k].num;q++) if (list[list[k].child[q]].c==s[j]) {flag2=1; break;} if (flag2==0) { for (p=j;p<sLen;p++) { list[k].child[list[k].num++]=++num; newNode(num,s[p]); k=num; } flag1=1; break; } else k=list[k].child[q]; } if (flag1==0) flag=1; if (flag==1) printf("NO\n"); } } if (flag==0) printf("YES\n"); } return 0; }
相关文章推荐
- ZooKeeper API操作
- zoj1163 (很经典很好的DP)
- 排序算法
- AA树
- redis设置为系统服务并开机启动(附脚本文件)
- java.lang.NoSuchMethodException: setContentView [int] android ViewUtils
- 如何使用struts2的Interceptor
- python成长之路第一篇(5)文件的基本操作
- java 通过zxing生成二维码
- [Algorithm]Maze Prim算法与A*寻路算法(上)
- LightOJ 1035 - Intelligent Factorial Factorization (求因子)
- 跳跃表实现的原理
- 日元负利率和美元暴跌,是对人民币的夹击
- 8 种常用的 NoSQL 数据库系统对比分析
- Android与PC间进行Socket通信
- Mybatis typeAliases别名
- LeetCode 73. Set Matrix Zeroes
- 利用github搭建个人小站
- php判断ip是否在指定ip区间内
- Linux 文件I/O — 文件描述符详解