zoukankan      html  css  js  c++  java
  • Fleury(佛罗莱)算法求欧拉回路的学习

    欧拉回路:简单来说,就是经过图G的每条边一次且仅一次,回到出发点的路径就叫欧拉回路;

    我就直接上模板了。。。。

    View Code
     1 #include<iostream>
     2 #include<stack>
     3 const int MAXN=111;
     4 using namespace std;
     5 
     6 stack<int>S;
     7 int edge[MAXN][MAXN];
     8 int n,m;
     9 
    10 void dfs(int x){
    11     S.push(x);
    12     for(int i=1;i<=n;i++){
    13         if(edge[x][i]>0){
    14             edge[i][x]=edge[x][i]=0;//删除此边
    15             dfs(i);
    16             break;
    17         }
    18     }
    19 }
    20 
    21 //Fleury算法的实现
    22 void Fleury(int x){
    23     S.push(x);
    24     while(!S.empty()){
    25         int b=0;
    26         for(int i=1;i<=n;i++){
    27             if(edge[S.top()][i]>0){
    28                 b=1;
    29                 break;
    30             }
    31         }
    32         if(b==0){
    33             printf("%d",S.top());
    34             S.pop();
    35         }else {
    36             int y=S.top();
    37             S.pop();
    38             dfs(y);//如果有,就dfs
    39         }
    40     }
    41     printf("\n");
    42 }
    43 
    44 int main(){
    45     scanf("%d%d",&n,&m); //读入顶点数以及边数
    46     memset(edge,0,sizeof(edge));
    47     int x,y;
    48     for(int i=1;i<=m;i++){
    49         scanf("%d%d",&x,&y);
    50         edge[x][y]=edge[y][x]=1;
    51     }
    52     //如果存在奇数顶点,则从奇数顶点出发,否则从顶点0出发
    53     int num=0,start=1;
    54     for(int i=1;i<=n;i++){                        //判断是否存在欧拉回路
    55         int degree=0;
    56         for(int j=1;j<=n;j++){
    57             degree+=edge[i][j];
    58         }
    59         if(degree&1){
    60             start=i,num++;
    61         }
    62     }
    63     if(num==0||num==2){
    64         Fleury(start);
    65     }else
    66         printf("No Euler Path\n");
    67     return 0;
    68 }
  • 相关阅读:
    PHP排序问题
    正则表达式——获取指定IP的物理地址
    两款网站页面翻译插件
    正则表达式应用之提炼歌词
    PHP 读取网页文件
    PHP正则表达式——匹配多行
    正则表达式——获取指定IP的物理地址(二)
    用百度音乐Widget从此不在为找MP3外链而烦恼
    I Saw Thee Weep
    POJ 3281 Dining
  • 原文地址:https://www.cnblogs.com/wally/p/2963189.html
Copyright © 2011-2022 走看看