fluery算法

 1 #include<stdio.h>
 2 #include<string.h>
 3 struct stack
 4 {
 5     int top;
 6     int node[100];
 7 }s;
 8 int n,map[100][100];
 9 void dfs(int x)
10 {
11     int i,j;
12     s.top++;
13     s.node[s.top]=x;
14     for(i=0;i<n;i++)
15     {
16         if(map[i][x])
17         {
18             map[i][x]=map[x][i]=0;
19             dfs(i);
20             break;
21         }
22     }
23 }
24 void fleury(int start)
25 {
26     int i,j;
27     s.top=0;s.node[s.top]=start;
28     while(s.top>=0)
29     {
30         int flag=0;
31         for(i=0;i<n;i++)
32         {
33             if(map[s.node[s.top]][i])
34             {
35                 flag=1;break;
36             }
37         }
38         if(!flag)
39         {
40             printf("%d ",s.node[s.top]+1);
41             s.top--;
42         }
43         else
44         {
45             s.top--;
46             dfs(s.node[s.top+1]);
47         }
48     }
49 }
50 int main()
51 {
52     int i,j,m,dgree;
53     while(scanf("%d%d",&n,&m)!=EOF)
54     {
55         memset(map,0,sizeof(map));
56         for(i=0;i<m;i++)
57         {
58             int s,t;
59             scanf("%d%d",&s,&t);
60             map[s-1][t-1]=map[t-1][s-1]=1;
61         }
62         int num=0,start=0;
63         for(i=0;i<n;i++)
64         {
65             dgree=0;
66             for(j=0;j<n;j++)
67             {
68                 if(map[i][j])
69                     dgree++;
70             }
71             if(dgree%2)
72             {
73                 num++;
74                 start=i;
75             }
76         }
77         if(num==0||num==2)
78             fleury(start);
79         else printf("NO\n");
80     }
81     return 0;
82 }
83 /*
84 9 14
85 1 2
86 1 8
87 2 3
88 2 8
89 2 9
90 3 4
91 4 5
92 4 6
93 4 9
94 5 6
95 6 7
96 6 9
97 7 8
98 8 9
99 */

 

posted @ 2015-05-15 22:20  sweat123  阅读(369)  评论(0编辑  收藏  举报