该证明参考王树禾《图论》(第二版)p127的证明,补全了缺失的细节
设fleury算法在无向欧拉图
G
(
V
,
E
)
G(V,E)
G(V,E)上运行,当fleury算法终止时,设已选出的边按选择顺序依次为
e
1
,
e
2
,
−
−
−
,
e
n
e1,e2,---,en
e1,e2,−−−,en ,这些边按选择顺序通过的由顶点组成的行迹是
v
1
,
v
2
,
−
−
−
,
v
n
,
v
n
+
1
v1,v2,---,v_{n},v_{n+1}
v1,v2,−−−,vn,vn+1,注意所有顶点被赋予不同的下标,但其中可能存在重复顶点。根据算法执行过程,当选出
e
n
e_{n}
en 并抵达顶点
v
n
+
1
v_{n+1}
vn+1 后,算法将无边可选,此时与
v
n
+
1
v_{n+1}
vn+1 关联的所有边均已被选择,所以他们都在边集
e
1
,
e
2
,
−
−
−
,
e
n
e1,e2,---,en
e1,e2,−−−,en 中,故
G
G
G的生成子图
G
−
(
e
1
,
e
2
,
−
−
−
,
e
n
)
G-(e1,e2,---,e_{n})
G−(e1,e2,−−−,en) 中
v
n
+
1
v_{n+1}
vn+1 的度为0 。我们断言,
v
1
=
v
n
+
1
v1=v_{n+1}
v1=vn+1
若不然,若 v n + 1 v_{n+1} vn+1 代表的顶点在行迹 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,−−−,vn,vn+1 中 v n + 1 v_{n+1} vn+1 之前出现了k次,注意 v 1 ≠ v n + 1 v n ≠ v n + 1 , v 1 , v 2 , − − − , v n , v n + 1 v_{1} \ne v_{n+1} v_{n} \ne v_{n+1} ,v1,v2,---,v_{n},v_{n+1} v1=vn+1vn=vn+1,v1,v2,−−−,vn,vn+1 中的边两两不同,且 v n + 1 v_{n+1} vn+1 在行迹中不可能和自身相邻,故算法在边 e n e_{n} en 之前已经选择 2 k 2k 2k条和 v n + 1 v_{n+1} vn+1 代表的顶点相关联的边.另外 e n e_{n} en 本身也是算法选择的和 v n + 1 v_{n+1} vn+1 关联的边,故算法终止时共选择了 2 k + 1 2k+1 2k+1条与 v n + 1 v_{n+1} vn+1 相关联的边,但 G G G为欧拉图,所有顶点的度为偶数,从而 v n + 1 v_{n+1} vn+1 未被选择的边必然大于等于1,这和算法在 v n + 1 v_{n+1} vn+1 处无边可选矛盾,故必有 v 1 = v n + 1 v1=v_{n+1} v1=vn+1 ,因此 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,−−−,vn,vn+1 为闭行迹
下面设 V 1 V1 V1为 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G−(e1,e2,−−−,en) 中度为0的顶点组成的集合, V 2 V2 V2为 V − V 1 V-V1 V−V1 即 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G−(e1,e2,−−−,en) 中所有度不为0的顶点组成的集合,由先前的结论 v 1 ∈ V 1 v1\in V1 v1∈V1 , V 1 V1 V1不空,现假设算法终止时仍有 G G G中的边未被选择,这样 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G−(e1,e2,−−−,en) 中有顶点的度大于0,从而 V 2 V2 V2同样不为空。
考察闭行迹 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,−−−,vn,vn+1 注意到 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G−(e1,e2,−−−,en) 中 V 1 , V 2 V1,V2 V1,V2不连通,即 V 2 V2 V2中任意顶点均无法到达 V 1 V1 V1中任意顶点(这是显然的,因为 V 1 V1 V1中所有顶点度为0),而 G G G为欧拉图,至多只有1个非平凡连通分量,因此 G G G连通,故当算法开始执行时可以从 V 2 V2 V2中某个顶点出发到达 V 1 V1 V1中某个顶点,算法运行过程中会不断无重复地选择新边,已选择的新边会从图中去除,结合以上事实即可知算法执行过程中必然会选择 G G G中一条边 e m e_{m} em ,在选择 e m e_{m} em 前可以从 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G−(e1,e2,−−−,em−1) 在 V 2 V2 V2中的某个顶点出发到达 V 1 V1 V1中某个顶点,选择 e m e_{m} em 后在图 G − ( e 1 , e 2 , − − − , e m ) G-(e1,e2,---,e_{m}) G−(e1,e2,−−−,em) 中 V 1 , V 2 V1,V2 V1,V2不连通.取 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G−(e1,e2,−−−,em−1) 中从 V 2 V2 V2中某个节点到 V 1 V1 V1中某个节点的所有简单路径中最短的一条 L L L(含边数最少),则 L L L上除端点以外的所有中间节点不可能属于 V 2 V2 V2和 V 1 V1 V1,否则我们可以取 L L L上不位于 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G−(e1,e2,−−−,em−1) 中由 V 1 V1 V1和 V 2 V2 V2生成的子图中的边 e e e( L L L上这样的边必然是存在的,否则 L L L无法连接 V 1 V1 V1和 V 2 V2 V2中的顶点), e e e两端的顶点不可能同属 V 1 V1 V1,或 V 2 V2 V2,否则和 e e e的取法相矛盾,即必然一端为 V 1 V1 V1中顶点,一端为 V 2 V2 V2中的顶点,该两顶点不可能是 L L L两端的顶点,否则 e e e即为 L L L,这和 L L L上除端点以外的中间顶点中存在属于 V 2 , V 1 V2,V1 V2,V1的假设矛盾,从而又 e e e的长度1必然小于 L L L的长度,这和 L L L是从 V 2 V2 V2中某个节点到 V 1 V1 V1中某个节点的所有简单路径中最短的一条路径的假设矛盾。故 L L L上除端点以外的所有中间节点不可能属于 V 2 V2 V2和 V 1 V1 V1。即 L L L就是一条边
于是我们断言, v m 和 v m + 1 v_{m} 和 v_{m+1} vm和vm+1 不可能同在 V 1 或 V 2 V1或V2 V1或V2中,否则从 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G−(e1,e2,−−−,em−1) 中删除的边 e m e_{m} em 是 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G−(e1,e2,−−−,em−1) 中由 V 1 V1 V1或 V 2 V2 V2生成的子图中的边,这样 L L L不会被删除,因此 G − ( e 1 , e 2 , − − − , e m ) G-(e1,e2,---,e_{m}) G−(e1,e2,−−−,em) 中 V 2 V2 V2仍存在顶点和 V 1 V1 V1中某顶点连通,连接它们的就是 L L L,这和图 G − ( e 1 , e 2 , − − − , e m ) G-(e1,e2,---,e_{m}) G−(e1,e2,−−−,em) 中 V 1 , V 2 V1,V2 V1,V2不连通矛盾。因此要么 v m v_{m} vm 属于 V 2 V2 V2, v m + 1 v_{m+1} vm+1 属于 V 1 V1 V1,要么 v m v_{m} vm 属于 V 1 , v m + 1 V1, v_{m+1} V1,vm+1 属于 V 2 V2 V2,我们断言前者成立。这是因为若后者成立,注意到算法从 v 1 v1 v1 出发经过闭行迹 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,−−−,vn,vn+1 回到 v 1 v1 v1 ,而 v 1 v1 v1 属于 V 1 V1 V1,这样选择并删去 e m e_{m} em 后,算法将从 v m + 1 v_{m+1} vm+1 出发经过上述闭行迹回到 v 1 v1 v1,注意 v m + 1 v_{m+1} vm+1 属于 V 2 V2 V2,而根据前述 G − ( e 1 , e 2 , − − − , e m ) G-(e1,e2,---,e_{m}) G−(e1,e2,−−−,em) 中 V 1 V1 V1和 V 2 V2 V2不连通,从而此后删除任意多边后在相应的图中 V 1 V1 V1和 V 2 V2 V2仍然不连通,故算法不可能从 v m + 1 v_{m+1} vm+1 出发经闭行迹回到 v 1 v1 v1 ,这是一个矛盾,从而我们有 v m v_{m} vm 属于 V 2 V2 V2, v m + 1 v_{m+1} vm+1 属于 V 1 V1 V1
由于删除 e m e_{m} em 前在可以在 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G−(e1,e2,−−−,em−1) 中从 V 2 V2 V2中某顶点出发抵达 V 1 V1 V1中某顶点,而删除后 G − ( e 1 , e 2 , − − − , e m ) G-(e1,e2,---,e_{m}) G−(e1,e2,−−−,em) 中 V 1 , V 2 V1,V2 V1,V2不连通,故 e m e_{m} em 为割边,即桥,根据算法执行过程,只有在无其他非桥边可选时才会选择桥,于是我们断言算法当前选择的边 e m e_{m} em 是算法此时能够选择的和 v m v_{m} vm 关联的唯一一条边。如若不然,则算法当前还可以选择与 v m v_{m} vm 关联的另一条边 e m ′ e_{m}' em′ ,由上文所述可知 e m ′ e_{m}' em′ 必为 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G−(e1,e2,−−−,em−1) 的桥,注意由于选择并删除 e m e_{m} em 后 V 1 , V 2 V1,V2 V1,V2不连通,所以 e m ′ e_{m}' em′上与 v m v_{m} vm相对的另一顶点必然位于 V 2 V2 V2中(否则删除 e m e_{m} em 后在 G − ( e 1 , e 2 , − − − , e m ) G-(e1,e2,---,e_{m}) G−(e1,e2,−−−,em) 中仍然可以从 v m v_{m} vm 出发通过边 e m ′ e_{m}' em′ 抵达 V 1 V1 V1中顶点,矛盾),又 e m ′ e_{m}' em′ 为 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G−(e1,e2,−−−,em−1) 的桥,故 e m ′ e_{m}' em′ 必为 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G−(e1,e2,−−−,em−1) 中由 V 2 V2 V2生成的子图中的桥。而算法当前删除的边 e m e_{m} em 并非 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G−(e1,e2,−−−,em−1) 中由 V 2 V2 V2生成的子图 G 2 G_{2} G2 中的边(因为 v m v_{m} vm 属于 V 2 V2 V2, v m + 1 v_{m+1} vm+1 属于 V 1 V1 V1),另外由于删除 e m e_{m} em 后 V 1 V1 V1 V 2 V2 V2不连通,此后无论如何选择删除边, V 1 V 2 V1 V2 V1V2始终不连通,因此闭行迹 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,−−−,vn,vn+1 上 v m + 1 v_{m+1} vm+1 及 v m + 1 v_{m+1} vm+1 后的所有顶点 均属于 V 1 V1 V1,从而边 e m + 1 , e m + 2 , − − − , e n e_{m+1},e_{m+2},---,e_{n} em+1,em+2,−−−,en 的两端点均属于 V 1 V1 V1,因此从 G − ( e 1 , e 2 , − − − , e m − 1 ) G-(e1,e2,---,e_{m-1}) G−(e1,e2,−−−,em−1) 开始依次选择并删除 e m , e m + 1 , − − − , e n e_{m},e_{m+1},---,e_{n} em,em+1,−−−,en 的过程中每删除一条边得到的新图中由 V 2 V2 V2生成的子图始终为 G 2 G_{2} G2 ,故 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G−(e1,e2,−−−,en) 中 V 2 V2 V2生成的子图 G n G_{n} Gn 仍然为 G 2 G_{2} G2 。 从而 e m ′ 为 G n 从而 e_{m}' 为 G_{n} 从而em′为Gn 的桥,但 G n G_{n} Gn 中每顶点的度数均为偶数(这是因为对 V 2 V2 V2中每一个顶点 v v v ,如果算法运行过程中与之关联的每一条边均未删除,则由 G G G 是欧拉图可知 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G−(e1,e2,−−−,en) 中该顶点度数为偶数,否则由 v v v 属于 V 2 V2 V2, v 1 v1 v1 属于 V 1 V1 V1, v ≠ v 1 v\ne v1 v=v1 且 v v v 出现在闭行迹 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,−−−,vn,vn+1 上, v v v 在该闭行迹上不可能和自身相邻,闭行迹上每一条边两两不同可知算法运行过程中 v v v 被删去了与之关联的偶数条边,故由 G G G 是欧拉图和 V 2 V2 V2定义知 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G−(e1,e2,−−−,en) 中 v v v 的度数为正偶数 而 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G−(e1,e2,−−−,en) 在 V 1 V1 V1中每一顶点的度数均为 0 0 0,故对 V 2 V2 V2中每一个顶点 v v v , G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G−(e1,e2,−−−,en) 中与之关联的每一条边 e e e 与 v v v 相对的另一顶点必属于 V 2 V2 V2,故 e e e 属于 G n G_{n} Gn ,从而 G n G_{n} Gn 中任意顶点的度为偶数)
G n G_{n} Gn 为偶图,而偶图可以被分解为一系列环,所以 G n G_{n} Gn 中任意边均在环上故不可能是桥,从而 e m ′ e_{m}' em′ 不为 G n G_{n} Gn 的桥,矛盾,故选择并删除 e m e_{m} em 时边 e m e_{m} em 是算法此时能够选择的和 v m v_{m} vm 关联的唯一一条边, 所以 e m e_{m} em 被选择后,与 v m v_m vm 关联的所有边全部被选择并从 G G G中删除,此后 v m v_m vm 无边与之关联,而我们知道算法终止时 G − ( e 1 , e 2 , − − − , e n ) G-(e1,e2,---,en) G−(e1,e2,−−−,en) 中 V 2 V2 V2中的 v m v_{m} vm 的度数不为零,这说明算法结束后 v m v_{m} vm 仍然有边与之关联,从而导出矛盾。这就证明了当fleury算法终止时, G G G中所有边均已被选择,它们位于 e 1 , e 2 , − − − , e n e1,e2,---,en e1,e2,−−−,en 中,这些边两两不同,从而 v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,v_{n},v_{n+1} v1,v2,−−−,vn,vn+1 为欧拉回路 这和算法终止时 G G G中仍有边未被选择, v 1 , v 2 , − − − , v n , v n + 1 v1,v2,---,vn,vn+1 v1,v2,−−−,vn,vn+1非欧拉回路矛盾
证毕