深度优先搜索——一笔画问题(欧拉图问题)
2015-08-14 11:11
344 查看
题目描述
zyc从小就比较喜欢玩一些小游戏,其中就包括画一笔画,他想请你帮他写一个程序,判断一个图是否能够用一笔画下来。
规定,所有的边都只能画一次,不能重复画。
输入第一行只有一个正整数N(N<=10)表示测试数据的组数。
每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中有多少个顶点和多少条连线。(点的编号从1到P)
随后的Q行,每行有两个正整数A,B(0<A,B<P),表示编号为A和B的两点之间有连线。输出如果存在符合条件的连线,则输出"Yes",
如果不存在符合条件的连线,输出"No"。样例输入
样例输出
代码有点乱,没时间整理,并且没有按照题目输出要求来,只是为了练习深度优先搜索而写的。
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 代码:
#include<iostream> #include<string> using namespace std; int a[100][100]={0}; int book[100][100]={0}; //这种初始化只能初始化为0,不能初始化为其他的数字 int node=0; //点数 int edge=0; //边数 int num=0; //遍历过的边数 int fangxiang[100]={0}; int k=0; //嵌套次数 int flag=0; int DFS(int step) { k++; fangxiang[k]=step; int i,j; if(num==edge) { flag=1; for(i=1;i<=k;i++) cout<<fangxiang[i]<<"--"; cout<<endl; return 1; } for(i=1;i<=node;i++) { if(a[step][i]==1&&book[step][i]==0) { num++; book[step][i]=1; book[i][step]=1; DFS(i); book[step][i]=0; book[i][step]=0; num--; fangxiang[k]=0; k--; } } return 0; } int main() { cin>>node>>edge; int i=0,x,y; for(i=1;i<=edge;i++) { cin>>x>>y; a[x][y]=1; a[y][x]=1; } for(i=1;i<=node;i++) { DFS(i); fangxiang[k]=0; k--; } if(flag) cout<<"yse"<<endl; else cout<<"no"<<endl; }
代码有点乱,没时间整理,并且没有按照题目输出要求来,只是为了练习深度优先搜索而写的。
相关文章推荐
- 如何将sql文件导入数据库
- Android之Android WebView常见问题及解决方案汇总
- 韩信点兵
- 我学正则表达式——组(group)和回溯引用(backreference)
- HDU 2296 Ring(AC自动机+dp)
- c++ primer 【笔记】multimap 和 multiset类型
- 【功能发布】Crash不好找?Bugly来支招!
- Linux启动管理器
- Python元组
- The Pilots Brothers' refrigerator
- ViewFlow增强onItemClick功能及ViewFlow AbsListView源码分析
- HDU 4442 Physical Examination
- php中文字符串翻转
- PLSQL win7 64位
- HDU 3073 Saving Beans
- Java是解释型语言
- js实现人才网站职位选择功能的方法
- hdu-1285 确定比赛名次
- android 管理ViewGroup中的触摸事件
- 未来航天飞机或用远程微波能量推动