题目描述
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 代码:
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 int a[100][100]={0}; 6 int book[100][100]={0}; //这种初始化只能初始化为0,不能初始化为其他的数字 7 int node=0; //点数 8 int edge=0; //边数 9 int num=0; //遍历过的边数 10 int fangxiang[100]={0}; 11 int k=0; //嵌套次数 12 int flag=0; 13 14 int DFS(int step) 15 { 16 k++; 17 fangxiang[k]=step; 18 int i,j; 19 if(num==edge) 20 { 21 flag=1; 22 for(i=1;i<=k;i++) 23 cout<<fangxiang[i]<<"--"; 24 cout<<endl; 25 return 1; 26 } 27 for(i=1;i<=node;i++) 28 { 29 if(a[step][i]==1&&book[step][i]==0) 30 { 31 num++; 32 book[step][i]=1; 33 book[i][step]=1; 34 DFS(i); 35 book[step][i]=0; 36 book[i][step]=0; 37 num--; 38 fangxiang[k]=0; 39 k--; 40 } 41 } 42 return 0; 43 } 44 45 int main() 46 { 47 cin>>node>>edge; 48 int i=0,x,y; 49 for(i=1;i<=edge;i++) 50 { 51 cin>>x>>y; 52 a[x][y]=1; 53 a[y][x]=1; 54 } 55 for(i=1;i<=node;i++) 56 { 57 DFS(i); 58 fangxiang[k]=0; 59 k--; 60 } 61 if(flag) 62 cout<<"yse"<<endl; 63 else 64 cout<<"no"<<endl; 65 }
代码有点乱,没时间整理,并且没有按照题目输出要求来,只是为了练习深度优先搜索而写的。
时间: 2024-11-10 10:27:47