离散复习资料之一(Fleury算法)
下面介绍一下:“什么叫做欧拉回路?”。
欧拉回路:有一条路从开始的位置到结束的位置都是同一个位置,经过了所有的点且通过了所有的边,通过的次数只能一次。比如著名的“哥尼斯堡七桥问题”
欧拉路:在欧拉回路的基础上面改一个条件。就是有一条路使得从开始的位置到结束的位置不是一个位置。
总结:具有一条经过所有边的简单回路,称欧拉回路,含欧拉回路的图称为欧拉图;如果图G中具有一条经过所有边的简单(非回路)路径,称欧拉路!
欧拉回路和欧拉路也有一个充分的判断条件。
欧拉回路:每一个结点都是偶结点。欧拉路:存在两个结点是奇结点。其余的是偶结点。
Fleury算法步骤如下:
1.任取Vo属于V(G),令Po = Vo 2.设Pi = Voe1V1e2.....eiVi,
如果E(G)-{e1,e2,...ei}中没有与Vi关联的边,则计算停止;否则按下述的条件从E(G)-{e1,e2,e3...ei}中任取一条边ei+1;
(a)ei+1与vi相关联。
(b)除非无别的边可供选择,否则ei+1不应该选择Gi = G-{e1,e2,e3...ei}中的桥。
设ei+1=(Vi,Vi+1),把ei+1Vi+1加入Pi,
3.令i = i+1,返回2.
大致意思就是:
他先把图形建立,随便选择开始点,把Vi的点对应的边设置为ei+1,结束条件就是如果此时的这一点没有关联的边的时候则算法结束(简单的说就是存在可以找的到的一条欧拉回路的判断条件。)。否则你随便可以选择哪一条边走,选择边的时候,除非没有别的边可以提供你选择,否则不要去选择过桥。
以上就是他的计算方法,他的思路其实很简单,采用的思想选择含一点递归思想,就是不断的选择边,当时在选择边的时候有一种边叫做桥,在是不是选择过桥的时候,加一点条件就可以了。
你走过的路度可以看作消失了,之后当你走到一个点的时候,你发现你没有路可以走的时候,那么你之前走过的那条路就称为桥。
当然我们知道了什么叫做桥。我们还应该明白什么时候我们要去过桥,什么时候我们不去过桥。
在此我们有一句口诀:“能不过桥,绝对不过桥。”
下面来一个图,让我们去看求一条简单欧拉回路。
就是从1开始遍历所有的点,然后回到原点,组成一个简单的欧拉回路。
让我们看一个很著名的选择路径的问题。
如图是一个欧拉图,某人用Fleury算法求这个图中的欧拉回路是什么?
一个走了一些简单回路 v1e1 --> v2e2 --> v3e3 --> v4e14 --> v9e10 --> v1e8 --> v8e8 --> v9e2之后,无法进行下去试着分析一下他在哪一步出现了问题?
原图如下:
下面我借上面的走法去解释一下:
首先就是V1e1
走V2e2
走V3e3
走V4e14
走V9e10
走V2e9
走V8e8
从上面我们可以看的出,就是最后的一次选择路径的时候,使得路由连通的变为不连通图,所以那一条边是“桥”。
整理下思路:
首先,我们知道存在开始点和未走的点的图不连通了。也就是V1和V7,V6,V5的连通性是不连通的。因为他选择的路径是如下图:
我们可以看到,存在一些点,未走过点,要想走完,就得一些边走第二遍,所以这是明显不可能。此时求得图,也不是欧拉回路图。
欧拉回路中,要求就是点可以过几次,但是边只能过一次,而且起点和终点在同一点。
所以我们在选择边的时候只要记得选择的要求就可以了。
以上就是Fleury算法求欧拉回路的简单过程。