杭电ACM1671——Phone List~~字典树
来源:互联网 发布:偷看微信聊天记录软件 编辑:程序博客网 时间:2024/05/29 18:57
这一题,也是简单的字典树的应用,不过这里不是字母,而是数字。
题目的意思是判断输入的字符串会不会是其他字符串的前缀。就是这么的简单。
下面是AC的代码:
#include <iostream>#include <cstring>using namespace std;class node //结点的结构体{public:node* P[10];};node* root; //定义根节点int ans; //叶子结点数void insert(char* str) //插入操作的函数{int len = strlen(str);node *q, *p;q = root;for(int i = 0; i < len; i++){int id = str[i] - '0';if(q->P[id] == NULL) //该位置不存在,new一个{p = new node;for(int j = 0; j < 10; j++)p->P[j] = NULL;q->P[id] = p;q = q->P[id];}else //存在,直接等于他的后继q = q->P[id];}}void fun(node *a) //递归找有多少个叶子结点{int flag = 0;for(int i = 0; i < 10; i++){if(a->P[i] != NULL){flag = 1;break;}}if(!flag) //该结点是叶子结点,ans++{ans++;return;}for(int j = 0; j < 10; j++)if(a->P[j] != NULL)fun(a->P[j]);}void dele(node *a) //删除操作的函数,也是递归完成{for(int i = 0; i < 10; i++)if(a->P[i] != NULL)dele(a->P[i]);delete a;}int main(){//freopen("data.txt", "r", stdin);int t, n;char str[15];cin >> t;while(t--){root = new node;ans = 0;for(int j = 0; j < 10; j++) //初始化根节点的指针数组Proot->P[j] = NULL;cin >> n;for(int i = 0; i < n; i++){cin >> str;insert(str); //插入}fun(root); //算叶子结点数目if(ans == n) //叶子结点等于输入的n 的个数,则YEScout << "YES" << endl;else //否则NOcout << "NO" << endl;dele(root); //删除}return 0;}
0 0
- 杭电ACM1671——Phone List~~字典树
- 【字典树】杭电1671 : Phone List
- 杭电1671——Phone List(字典树的应用)
- 杭电acm 1671Phone List(字典树)
- poj3630—Phone List(字典树)
- 字典树phone list
- Phone List(字典树)
- Phone List(字典树)
- Phone List --->字典树
- 杭电 1671——Phone List
- 【字典树】zoj2876 Phone list
- 【字典树】 hdu1671 Phone List
- poj3630(Phone List+字典树)
- Phone List(poj3630,字典树)
- Phone List(hdu1671字典树)
- hdu1671 Phone List (字典树)
- hdu Phone List 字典树
- HDU1671 Phone List【字典树】
- android进程和线程
- php数组:城市车牌对应城市名称
- Happy Number —— Leetcode
- Win7下安装DirectShow
- OMNeT++ 4.2.2 can not find symbol in index
- 杭电ACM1671——Phone List~~字典树
- 通过OdiOSCommand批量执行EPM中CM写的规则(集)
- C# 对称加解密
- C++迭代器 iterator
- CocoaPods详解之----使用篇
- 【兄弟连 】Spring Mvc3 和 C# MVC3
- Android开发中常用的工具类整理
- Solr在MySQL中建立索引
- iOS端使用二维码扫描(ZBarSDK)和生成(libqrencode)功能