zoukankan      html  css  js  c++  java
  • Fleury算法 求欧拉回路

    Fleury算法

     

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <cmath>
     5 #include <algorithm>
     6 #include <climits>
     7 #include <vector>
     8 #include <queue>
     9 #include <cstdlib>
    10 #include <string>
    11 #include <set>
    12 #include <stack>
    13 #define LL long long
    14 #define pii pair<int,int>
    15 #define INF 0x3f3f3f3f
    16 using namespace std;
    17 const int maxn = 1000;
    18 bool e[maxn][maxn];
    19 int n,m;
    20 stack<int>stk;
    21 void dfs(int u){
    22     stk.push(u);
    23     for(int i = 1; i <= n; i++){
    24         if(e[u][i]){
    25             e[u][i] = false;
    26             e[i][u] = false;
    27             dfs(i);
    28             break;
    29         }
    30     }
    31 }
    32 void Fleury(int x){
    33     while(!stk.empty()) stk.pop();
    34     stk.push(x);
    35     int i;
    36     while(!stk.empty()){
    37         int u = stk.top();
    38         stk.pop();
    39         for(i = 1; i <= n; i++)
    40             if(e[u][i]) break;
    41        if(i <= n) dfs(u); else printf("%d ",u);
    42     }
    43     puts("");
    44 }
    45 int main() {
    46     int u,v,cnt,degree,st;
    47     while(~scanf("%d %d",&n,&m)){
    48         memset(e,false,sizeof(e));
    49         for(int i = 0; i < m; i++){
    50             scanf("%d %d",&u,&v);
    51             e[u][v] = e[v][u] = true;
    52         }
    53         cnt = 0;
    54         st = 1;
    55         for(int i = 1; i <= n; i++){
    56             for(int j = 1,degree = 0; j <= n; j++)
    57                 if(e[i][j]) degree++;
    58             if(degree&1){
    59                 st = i;
    60                 cnt++;
    61             }
    62         }
    63         if(cnt == 2 || !cnt) Fleury(st);
    64         else puts("No Euler path");
    65     }
    66     return 0;
    67 }
  • 相关阅读:
    hdu1875(最小生成树prime)
    hdu1839(最小生成树)
    poj2739(尺取法+质数筛)
    poj2100(尺取法)
    codeforces-div2-449-B
    gym-101350M
    gym-10135I
    gym-101350H
    gym-101350D
    hdu 5569
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/3964249.html
Copyright © 2011-2022 走看看