博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
欧拉回路(附模板)
阅读量:4649 次
发布时间:2019-06-09

本文共 1862 字,大约阅读时间需要 6 分钟。

 
欧拉回路:图G,若存在一条路,经过G中每条边有且仅有一次,称这条路为欧拉路,如果存在一条回路经过G每条边有且仅有一次,
称这条回路为欧拉回路。具有欧拉回路的图成为欧拉图。
 
判断欧拉路是否存在的方法
有向图:图连通,有一个顶点出度大入度1,有一个顶点入度大出度1,其余都是出度=入度。
无向图:图连通,只有两个顶点是奇数度,其余都是偶数度的。
判断欧拉回路是否存在的方法
有向图:图连通,所有的顶点出度=入度。
无向图:图连通,所有顶点都是偶数度。

求欧拉回路的Fleury算法

   设G为欧拉图,一般说来G中存在若干条欧拉回路,下面是求欧拉回路的Fleury算法:

Fleury算法:

(1)任取v0∈V(G),令P0=v0;(如果是求欧拉路,则:1.无向欧拉路选那两个奇数度的点;2.有向欧拉路选出度大入度1的点)

(2)设Pi=v0e1v1e2...eivi已经行遍,按下面方法来从E(G)-{e1,e2,...,ei}中选

     取ei+1:

    (a)ei+1与vi相关联;

    (b)除非无别的边可供行遍,否则ei+1不应该为Gi=G-{e1,e2,...,ei}中的桥.(每搜到一个边便删掉)

(3)当(2)不能再进行时,算法停止。

可以证明,当算法停止时所得简单回路Pm=v0e1v1e2...emvm(vm=v0)为G中的一条欧拉回路。

 

C++模版:

 
// 求欧拉回路或欧拉路,邻接阵形式,复杂度o(n^2)//返回路径长度,path返回路径(有向图是得到的是反向路径)//传入图的大小n和邻接阵mat,不相交邻点边权0//可以有自环与重边,分为无向图和有向图#define MAXN 100 void find_path_u(int n,int mat[][MAXN],int now,int& step,int* path){  int i;   for (i=n-1;i>=0;i--)     while (mat[now][i])    {       mat[now][i]--,mat[i][now]--;       find_path_u(n,mat,i,step,path);     }   path[step++]=now; }void find_path_d(int n,int mat[][MAXN],int now,int& step,int* path){   int i;   for (i=n-1;i>=0;i--)     while (mat[now][i])    {       mat[now][i]--;       find_path_d(n,mat,i,step,path);     }   path[step++]=now; }int euclid_path(int n,int mat[][MAXN],int start,int* path){   int ret=0;   find_path_u(n,mat,start,ret,path);   // find_path_d(n,mat,start,ret,path);   return ret; }
 
练习题:
  
1 HDU 3018 Ant Trip
   一笔画问题,无向图欧拉路或者欧拉回路,注意题目说了,如果是孤立点,则不用考虑。
  
2 POJ 1041 John's trip
 
3 POJ 1386 Play on Words
    貌似很经典的模型了,应该叫 单词接龙吧。
    本题要求判断是否有 有向图欧拉路
 
4 POJ 2230 Watch Cow
     题目描述每条路必须走两次,且方向不同,其实一样了,有向图的欧拉回路
不过需要输出的是路径中的节点。  
5 POJ 2513 Colored Sticks
    比较简单,判定是否存在 无向图欧拉路
 
6 POJ 2337 Catenyms
      还是单词 首尾相连,要求判断,然后输出字典序最小的
    
7 POJ 1392 Ouroboros Snake
http://blog.csdn.net/yueashuxia/archive/2010/07/12/5729878.aspx
    这里涉及到DeBruijin图
    本题要求 按顺序输出 组成的数字。
8 HDU 2894 DeBruijin
  同上,这次要输出串

转载于:https://www.cnblogs.com/AbandonZHANG/archive/2012/07/27/4113962.html

你可能感兴趣的文章
PAT——1074. 宇宙无敌加法器(20)
查看>>
迟到的tkinter---学校选课刷屏器
查看>>
[转载] 深入理解Linux修改hostname
查看>>
通过生日查询各年龄段数量通过饼状图显示
查看>>
WPF仿制IOS UI(未完待续)
查看>>
NOIP2018 No regrets youth
查看>>
BayaiM__SQLLDR_linux_shell高级版
查看>>
蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索
查看>>
如何配置Smarty模板
查看>>
hdu1222
查看>>
从函数返回数组
查看>>
Rsync学习之旅上
查看>>
eclipse简单使用
查看>>
通过Ollydbg定位私有协议通信明文
查看>>
SWIFT4.0学习01 - 函数的命名、调用以及注意事项
查看>>
这个世界是那样的似曾相识
查看>>
python-生成器
查看>>
使用jenkins进行Android的持续集成
查看>>
2018-2019-1 20165234 《信息安全系统设计基础》第八周学习总结
查看>>
Linux指令
查看>>