1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
| #include <cstdlib> #include <cstring> #include <cstdio> #include <iostream> #include <algorithm> using namespace std; int ans[200]; int top; int N,M; int mp[200][200]; void dfs(int x) { int i; top++; ans[top]=x; for (i=1; i<=N; i++) { if(mp[x][i]>0) { mp[x][i]=mp[i][x]=0; dfs(i); break; } } }
void fleury(int x) { int brige,i; top=1; ans[top]=x; while(top>=0) { brige=0; for (i=1; i<=N; i++) { if(mp[ans[top]][i]>0) { brige=1; break; } } if (!brige) { printf("%d ", ans[top]); top--; } else { top--; dfs(ans[top+1]); } } }
int main() { int x,y,deg,num,start,i,j; scanf("%d%d",&N,&M); memset(mp,0,sizeof (mp)); for(i=1;i<=M; i++) { scanf("%d%d",&x,&y); mp[x][y]=1; mp[y][x]=1; } num=0; start=1; for(i=1; i<=N; i++) { deg=0; for(j=1; j<=N; j++) { deg+=mp[i][j]; } if(deg%2==1) { start=i; num++; } } if(num==0||num==2) { fleury(start); } else { puts("No Euler path"); } return 0; }
|