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 */

 

转载于:https://www.cnblogs.com/sweat123/p/4506948.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值