题目42:一笔画问题
2017-09-28 14:21
218 查看
题目链接:
http://acm.nyist.net/JudgeOnline/problem.php?pid=42描述
zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。规定,所有的边都只能画一次,不能重复画。
输入
第一行只有一个正整数N(N≤10)表示测试数据的组数。每组测试数据的第一行有两个正整数P,Q(P≤1000,Q≤2000),分别表示这个画中有多少个顶点和多少条连线。(点的编号从1到P)
随后的Q行,每行有两个正整数A,B(0<A,B<P),表示编号为A和B的两点之间有连线。
输出
如果存在符合条件的连线,则输出”Yes”,如果不存在符合条件的连线,输出”No”。
样例输入
2 4 3 1 2 1 3 1 4 4 5 1 2 2 3 1 3 1 4 3 4 |
样例输出
No Yes |
算法思想:
这是一道搜索的题目,使用深度搜索算法,模拟遍历过程,直到没有能够连接的点不能能够继续搜索下去退出本次搜索,并将flag置为0,表示本次搜索不能完成一笔画遍历所有边,或者所有的边均已访问过,将flag置为1,表示本次搜索能够完成一笔画遍历所有边。以上是一次搜索的过程,但是搜索的起始点可以是任意一个点,故循环遍历节点,以每一个开始节点为起始节点进行搜索,直到搜索成功或者循环退出还未搜索成功。
一次遍历,s = 1,line = 0(起始点为1,线段为0号线段)过程如图所示:
源代码
#include <iostream> #include <cstring> using namespace std; int a[2001][2]; int visited[1001]; int P, Q, flag; //搜索,当寻找到一条线段且该线段的端点有一个与起始节点相同 //将起始节点更新为该线段的另一个节点,并更新该线段访问状态为已经访问。 void dfs(int s, int line) { visited[line] = 1; for (int i = 0; i < Q; i++) { if (a[i][0] == s && !visited[i]) //该线段的左端点为s且该线段未访问 { s = a[i][1]; //将起始点s更新为该线段的另一个端点,并将该线段访问状态更新为已访问 visited[i] = 1; } else if (a[i][1] == s && !visited[i]) //同上 { s = a[i][0]; visited[i] = 1; } } int i; for (i = 0; i < Q; i++) //循环遍历所有线段,检查所有线段是否已访问 { if (!visited[i]) break; } if (i < Q) flag = 0; else flag = 1; } int main() { int N, b, c; cin >> N; while (N--) { cin >> P >> Q; memset(a,0,sizeof(a)); memset(visited,0,sizeof(visited)); flag = 0; for (int i = 0; i < Q; i++) { cin >> a[i][0] >> a[i][1]; } int i; for ( i = 0; i < Q; i++) { for (int j = 0; j < 2; j++) { dfs(a[i][j], i); if (flag) break; else memset(visited, 0, sizeof(visited)); } if (flag) break; } if (i < Q) cout << "Yes" << endl; else cout << "No" << endl; } return 0; }
算法复杂度:
由源代码可知,算法时间复杂度为O(P * Q)。相关文章推荐
- NYOJ--42(搜索)-题目----------------------------- 一笔画问题
- 南阳理工OJ 题目42 一笔画问题
- NYOJ 题目42:一笔画问题
- 南阳ACM 题目42 一笔画问题
- 南阳理工OJ_题目42 一笔画问题
- NYOJ 题目42 一笔画问题(欧拉图)
- NYOJ 题目42 一笔画问题
- NYOJ 题目42 一笔画问题(欧拉图)
- 南阳oj 题目42 一笔画问题
- NYOJ 题目42 一笔画问题(欧拉路,图的连通性)
- NYOJ 题目42 一笔画问题 (欧拉连通图+并查集)
- NYIST OJ 题目42 一笔画问题
- nyoj_42 一笔画问题
- NYOJ 42 一笔画问题
- NYoj42 一笔画问题
- NYOJ--42--dfs--一笔画问题
- NYOJ 42 一笔画问题(欧拉定理&&并查集)
- nyoj42 一笔画问题 欧拉图
- NYOJ 42 一笔画问题(欧拉路径)
- nyoj_42_一笔画问题_201403181935