- 12
- 0
- 约1.13万字
- 约 5页
- 2021-11-21 发布于辽宁
- 举报
一、 实验内容:
判断图 G 是否存在欧拉回路,若存在,输出其中一条欧拉回路。否则,显示无回路。
二、 实验过程与结果
1. 问题简介: 通过图 (无向图或有向图)中所有边一次且仅一次行遍所有顶点的回路称为欧拉回路。
具有欧拉回路的图称为欧拉图
2. 算法思想(框图) :
(1)任取 v0 ∈V(G),令 P0=v0.
(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 中一条欧拉回路。
3. 数据输入:
边数 5,点数 6
相关联的点 1 2
1 3
2 5
4 2
3 2
4 5
4. 运行结果:
存在欧拉回路 1,3 ,2 ,4 ,5,2 , 1
5. 分析总结:
Fleury 算法是求欧拉图的十分有效的算法,在执行过程中需要用到类似于图的深度优先遍历,因
为该算法就是需要将已找到的路径不断的扩展下去,直到将所有边扩展进路径。
图 G
判断是否为欧拉图
(连通性和奇度点)
y n
P0=V0=1 输出无欧拉
回路
Pi=v0e1v1 …eivi,
ei+1 ∈E(G)-{e1,… ,ei}
Y
ei+1 与 vi 关联,
i=i+1,ei+1 非桥
E(G)-{e1,e2,…,ei}=Φ
输 出 欧 拉 回 路
Pm v0e1v1e2emvm(vm=v0
=
)
Fleury 算法流程图
三、 完整源程序
#include }
#include
#include if(sn){
;
struct stack t=[];
{
原创力文档

文档评论(0)