pku 1308 Is A Tree 搜索 解题报告
来源:互联网 发布:php商城开源 编辑:程序博客网 时间:2024/06/02 04:23
pku 1308 Is A Tree 搜索 解题报告 注意几点就ok: 1、0 0 //空树就是一棵树; 2、入度为0结点有几个 //即not tree 3、存在没有一个结点的入度为0 //即not tree AC代码: #include <stdio.h> #include <string.h> #define size 30 #define Min(a, b) (a > b ? b : a) #define Max(a, b) (a > b ? a : b) int min, max; int degree[size]; bool visit[size]; int tree[size][size]; bool answer; void init(int x, int y) { degree[y]++; visit[x] = visit[y] = true; tree[x][y]++; min = Min(min, x); min = Min(min, y); max = Max(max, x); max = Max(max, y); while (scanf("%d%d", &x, &y)) { if (x == 0 && y == 0) { getchar(); break; } min = Min(min, x); min = Min(min, y); max = Max(max, x); max = Max(max, y); degree[y]++; visit[x] = visit[y] = true; tree[x][y]++; if (tree[x][y] > 1) { answer = true; } } } int dfs(int Target, int p) { int i, sum = 0; if (p == Target) { return 1; } for (i = min; i <= max; i++) { if (tree[p][i]) { sum += dfs(Target, i); } } return sum; } int main() { int i, x, y, test = 1, start, time; while (scanf("%d%d", &x, &y)) { if (x == -1 && y == -1) { break; } if (x == 0 && y == 0) { //这里很诡异,空树是一棵树,晕晕~~~~ printf("Case %d is a tree./n", test++); memset(tree, 0, sizeof(tree)); memset(degree, 0, sizeof(degree)); memset(visit, false, sizeof(visit)); getchar(); continue; } answer = false; min = 100; max = 0; init(x, y); start = 0; time = 0; for (i = min; i <= max; i++) { //degree[i]标记入度,如果所有的结点入度都不是0的话,那么就是not tree if (degree[i] == 0 && visit[i]) { start = i; time++; //记录有几棵树,有2棵以上,那么就是not tree } } if ((start == 0 || time > 1) || answer) { printf("Case %d is not a tree./n", test++); memset(tree, 0, sizeof(tree)); memset(degree, 0, sizeof(degree)); memset(visit, false, sizeof(visit)); continue; } answer = false; for (i = min; i <= max; i++) { if (i != start && degree[i] >= 1) { //搜索判断有几条路径,不是唯一的,那么not tree if (dfs(i, start) > 1) { answer = true; break; } } } if (answer) { printf("Case %d is not a tree./n", test++); } else { printf("Case %d is a tree./n", test++); } memset(tree, 0, sizeof(tree)); memset(degree, 0, sizeof(degree)); memset(visit, false, sizeof(visit)); } return 0; }
- pku 1308 Is A Tree 搜索 解题报告
- POJ-1308 & HDOJ-1325 Is It A Tree? 解题报告
- POJ 1308 Is It A Tree? 解题报告
- pku 树形DP 1848 Tree 解题报告
- 1123. Is It a Complete AVL Tree (30)解题报告
- pku 1970 搜索 The Game 解题报告
- pku 1011 sticks 搜索+剪枝 解题报告
- 【解题报告】 POJ 1308 Is It A Tree? 并查集判断一棵树
- pku 1308 Is It A Tree?(并查集)
- pku 1164 解题报告 简单的深度优先搜索
- pku 1111 解题报告 简单的广度优先搜索
- pku 1164 the castle 深度搜索 解题报告
- pku 1011 解题报告
- pku 2975解题报告
- pku 1088 解题报告
- pku 1002 解题报告
- pku 1003解题报告
- pku 1004 解题报告
- 【转贴】论GNU、Linux和GNU/Linux之间的关系
- 數據庫版本控制
- 猜数的小代码
- 知识表示
- 广义表的定义
- pku 1308 Is A Tree 搜索 解题报告
- CString的GetLength()函数返回为0问题解决
- .net sql防注入代码
- 解决出现 ./configure and got “configure: error: C++ compiler cannot create executables的方法
- pku 2234 matches game 博弈
- 找零钱的代码
- Java的编译器给enum自动添加了哪些专用方法?
- Windows中ntfs和fat32的区别和选择
- POJ_1001