这是一道典型的欧拉回路的题,第一次做这种题,参考了一下别人的代码,结果WA了一晚上,最后照着别人的代码一步一步的改,最后才发现有存在x==y的情况
真是杯具,浪费了一晚上的时间
1#include<iostream>
2#include<algorithm>
3using namespace std;
4
5struct node{
6 int v;
7 int str;
8};
9
10node dd[50][2000];
11bool mark[2000];
12int stack[2000];
13int d[50];
14int size;
15int end;
16
17
18void dfs(int k)
19{
20 for(int i=1;i<=dd[k][0].v;i++){
21 if(!mark[dd[k][i].str]){
22 mark[dd[k][i].str]=true;
23 dfs(dd[k][i].v);
24 stack[++size]=dd[k][i].str;
25 }
26 }
27}
28
29int main()
30{
31 int x,y,z,start;
32 while(cin>>x>>y&&y){
33 memset(mark,false,sizeof(mark));
34 memset(stack,0,sizeof(stack));
35 memset(d,0,sizeof(d));
36 size=0;
37 start=x,end=x;
38
39 start=min(x,start);
40
41 end=max(x,end);
42
43 for(int i=0;i<50;i++)
44 dd[i][0].v=0;
45 do{
46 end=max(end,x);
47 end=max(end,y);
48 cin>>z;
49 d[x]++;
50 d[y]++;
51
52 dd[x][0].v++;
53 dd[x][dd[x][0].v].v=y;
54 dd[x][dd[x][0].v].str=z;
55
56 dd[y][0].v++;
57 dd[y][dd[y][0].v].v=x;
58 dd[y][dd[y][0].v].str=z;
59 }while(cin>>x>>y&&y);
60 bool flag=false;
61 for(int i=1;i<=end;i++)
62 if(d[i]%2) flag=true;
63 if(flag) printf("Round trip does not exist.\n");
64 else{
65 dfs(start);
66
67 for(int i=size;i>0;i--)
68 printf("%d ",stack[i]);
69 putchar('\n');
70 }
71 }
72 return 0;
74}
75
76