求欧拉回路的路径(usaco3.3Riding the Fences)
1 #include <cstdio> 2 #include <iostream> 3 using namespace std; 4 const int Ni = 505; 5 const int n = 500; 6 int eg[Ni][Ni]; 7 int deg[Ni],pos; 8 int path[Ni*5]; 9 void dfs(int s) 10 { 11 if(deg[s]) 12 for(int i=1;i<=n;i++) if(eg[s][i]) 13 { 14 eg[s][i]--; 15 eg[i][s]--; 16 deg[s]--; 17 deg[i]--; 18 dfs(i); 19 } 20 path[++pos]=s; 21 } 22 int main() 23 { 24 int i,s,m,u,v; 25 while(~scanf("%d",&m)) 26 { 27 pos=-1; 28 for(i=0;i<m;i++) 29 { 30 scanf("%d%d",&u,&v); 31 deg[u]++;deg[v]++; 32 eg[u][v]++; 33 eg[v][u]++; 34 } 35 for(i=1;i<=n;i++) if(deg[i]) 36 {s=i;break;} 37 for(;i<=n;i++) if(deg[i]&1) 38 {s=i;break;} 39 dfs(s); 40 for(i=pos;i>0;i--) 41 printf("%d ",path[i]); 42 printf("%d\n",path[0]); 43 } 44 return 0; 45 } 46 /* 47 6 48 1 2 49 1 3 50 2 3 51 2 4 52 2 5 53 4 5 54 ans 55 1 2 4 5 2 3 1 56 */