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 }

转载于:https://www.cnblogs.com/crackpotisback/p/3964249.html

Fleury算法 求欧拉回路相关推荐

  1. uoj #117. 欧拉回路 圈套圈算法求欧拉回路

    题意 给你一个有向图或无向图,要求输出其中一条欧拉回路. n≤100000 n ≤ 100000 n\le100000 分析 圈套圈算法求欧拉回路的模版题. 这个算法大概是,从某个点开始走,然后用一个 ...

  2. 离散数学实验-01 可简单图化,连通图和欧拉图的判断(利用Fleury算法输出欧拉回路)

    离散数学的实验 实验要求 给定一非负整数序列(例如:(4,2,2,2,2)). 判断此非负整数序列是否是可图化的,是否是可简单图化的. 如果是可简单图化的,根据Havel定理过程求出对应的简单图,并输 ...

  3. fleury求欧拉环游算法 matlab,Fleury算法求欧拉路径

    分析: 小Ho:这种简单的谜题就交给我吧! 小Hi:真的没问题么? <10分钟过去> 小Ho:啊啊啊啊啊!搞不定啊!!!骨牌数量一多就乱了. 小Hi:哎,我就知道你会遇到问题. 小Ho:小 ...

  4. 【欧拉回路】【欧拉路径】【Fleury算法】CDOJ1634 记得小苹初见,两重心字罗衣...

    Fleury算法看这里 http://hihocoder.com/problemset/problem/1181 把每个点看成边,每个横纵坐标看成一个点,得到一个无向图. 如果新图中每个点的度都是偶数 ...

  5. 实现求欧拉回路算法(C++)

    一.算法介绍及实现过程: 程序的输入为对应图的结点数和图中与各结点相连的点的编号.(注:无向图中的多重边和自环需多次输入:有向图中的多重边需多次输入) 程序的第一步是求出图的邻接矩阵.邻接矩阵反映了点 ...

  6. UESTC 1642 老当益壮, 宁移白首之心? 欧拉回路、Fleury算法

    老当益壮, 宁移白首之心? Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Su ...

  7. 使用tarjan算法和fleury算法求解中国邮递员问题

    一.代码思路 1.首先使用结构体的二维数组储存图. 2. 然后使用另外一个结构体二维数组储存相邻点间有几条边. 3.使用floyd算法求出两点间的最短距离. 4.fleury算法的原则"除非 ...

  8. 第九章第十三节(无向图求欧拉回路)

    欧拉环游:在图中找到一条路径,从起点开始,依此经过图中的所有边,一个边只能走一次,到达终点,终点和起点可以不同 欧拉回路:在图中找到一条路径,从起点开始,依此经过图中的所有边,最后回到起点,一个边只能 ...

  9. Matlab实现连通域标记算法求图像连通域

    Matlab实现连通域标记算法求图像连通域 连通域 连通域标记算法 连通域 连通区域(Connected Component)一般是指图像中具有相同像素值且位置相邻的前景像素点组成的图像区域(Regi ...

最新文章

  1. 阿里开源分布式事务解决方案 Fescar 全解析
  2. python定义字典列表_[Python基础]五、列表、元组和字典
  3. Cow Toll Paths(floyd变形)
  4. go iscoinbase()_《电车GO!驰骋吧山手线》新情报:高分攻略与新模式介绍
  5. Android分渠道打包(Python 3.4 实现)
  6. 好代码是管出来的——.Net中的代码规范工具及使用
  7. mysql sys 数据库_mysql sys 数据库
  8. 服务器u盘安装win7系统,如何用U盘安装win7原版64位系统
  9. 基于MDC的SOA方案
  10. php怎么访问到外部变量,从外部javascript fi访问PHP var
  11. 右键文件夹导致资源管理器关闭的处理办法
  12. 22.分布式系统基础设施
  13. 5s管理推进的三个阶段及三大实施原则
  14. jav中jar包的MANIFEST.MF
  15. 海尔智家、海尔电器合体战美的、格力
  16. win10 git bash 设置别名
  17. 实时操作系统-与QNX比较-qnx系统优势-qnx性能分析-qnx系统性能分析
  18. 2020最新版MySQL数据库面试题(一)
  19. element UI dialog点击dialog区域外会关闭dialog
  20. 人脸识别2:InsightFace实现人脸识别Face Recognition(含源码下载)

热门文章

  1. 精通Android自定义View(十六)invalidate方法和requestLayout方法
  2. 如何通过一个结构体成员变量的地址找到该结构体的首地址?[备忘]
  3. Excel还是那些事
  4. python-day18(反射)
  5. linux 远程调试
  6. C# 使用Microsoft.Office.Interop将Excel、Word转换成PDF遇到的问题总结
  7. HDwiki 6.0 图片大图不能正常显示的解决方法
  8. main函数argc,argv操作
  9. 交叉表组件(改造 适用多个子标题)
  10. Vite 创建 vue3.x 项目