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 }
  • 相关阅读:
    209. Minimum Size Subarray Sum
    208. Implement Trie (Prefix Tree)
    207. Course Schedule
    206. Reverse Linked List
    205. Isomorphic Strings
    204. Count Primes
    203. Remove Linked List Elements
    201. Bitwise AND of Numbers Range
    199. Binary Tree Right Side View
    ArcGIS API for JavaScript 4.2学习笔记[8] 2D与3D视图同步
  • 原文地址:https://www.cnblogs.com/wally/p/2963189.html
Copyright © 2011-2022 走看看