• Fleury 求欧拉回路


    思想就是有别的选择就不走桥。

    加一个dfs.

    看代码自行理解,我也没理解完全。

    欧拉回路或欧拉通路的判别定理:度为奇数的顶点数目为2或0,为2有欧拉通路,起点和终点就是度为奇数的点,为0有欧拉回路,起点任意。

    View Code
     1 #include <cstdio>
     2 #include <cstring>
     3 #define MAXN 100
     4 bool edge[MAXN][MAXN];
     5 int n;
     6 int mystack[MAXN];
     7 int top;
     8 void dfs(int x)
     9 {
    10     int i;
    11     mystack[top++] = x;
    12     for(i = 1; i<= n; i++)
    13     {
    14         if(edge[i][x])
    15         {
    16             edge[i][x] = false;
    17             edge[x][i] = false;
    18             dfs(i);
    19             break;
    20         }
    21     }
    22 }
    23 void Fleury(int x)
    24 {
    25     top = 0;
    26     int i;
    27     mystack[top++] = x;
    28     while(top > 0)
    29     {
    30         bool flag = false;
    31         top--;
    32         for(i=1; i<=n; i++)
    33         {
    34             if(edge[i][mystack[top]])
    35             {
    36                 flag = true;
    37                 break;
    38             }
    39         }
    40         if(flag)
    41         {
    42             dfs(mystack[top]);
    43         }
    44         else
    45         {
    46             printf("%d ",mystack[top]);
    47         }
    48     }
    49 }
    50 int main()
    51 {
    52     freopen("in.cpp","r",stdin);
    53     int i,j;
    54     int m;
    55     scanf("%d%d",&n,&m);
    56     memset(edge,0,sizeof(edge));
    57     for(i=0; i<m; i++)
    58     {
    59         int u,v;
    60         scanf("%d%d",&u,&v);
    61         edge[v][u] = edge[u][v]  = true;
    62     }
    63     int num = 0;
    64     int start = 1;
    65     for(i =1; i<=n; i++)
    66     {
    67         int degree = 0;
    68         for(j=1; j<=n; j++)
    69             degree += edge[i][j];
    70         if(degree&1)
    71         {
    72             start = i;
    73             num++;
    74         }
    75     }
    76     if(num == 0 || num == 2)
    77         Fleury(start);
    78     else
    79         printf("No Euler path\n");
    80     return 0;
    81 }
  • 相关阅读:
    lnmp 优化
    linux-lnmp 搭建报错
    nfs 配置
    全网备份脚本rsync
    .Net面试题二
    软件设计模式
    .Net面试题一
    asp.net运行机制
    NHiberante的优缺点
    什么是架构、框架、模式和平台
  • 原文地址:https://www.cnblogs.com/allh123/p/2997121.html
Copyright © 2020-2023  润新知