求欧拉回路的路径(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 */

 

posted @ 2012-09-15 16:04  qijinbiao1  阅读(232)  评论(0编辑  收藏  举报