欧拉回路及哈密顿回路

来源:互联网 发布:美工网 编辑:程序博客网 时间:2024/04/26 09:26

转载自:http://blog.csdn.net/zhang360896270/article/details/8746783

欧拉图:

在图为连通图的前提下,欧拉通路:当前图中经过每条边一次且仅一次,若最终回到出发点则称为欧拉回路。

相关判定条件(图联通)

(1)无向图存在欧拉回路的条件是:图中不存在奇度结点,有向图存在欧拉回路的条件是:每个结点出度均等于入度

(2)无向图存在欧拉通路的条件是:图中仅存在两个奇度结点(起点和终点),有向图存在欧拉通路的条件是:存在两个结点入度不等于出度,分别为起点(出度-入度==1)和终点(入度-出度==1)

除此之外个人认为无向图只要存在欧拉回路则从任意一点出发均可遍历全部边回到该点(哈密顿图同理)。

判定欧拉图只是基础,更重要的是找出具体的欧拉路径(回路)

算法:

使用链式前向星存储图(便于找边),可先通过并查集(或者广搜)判断当前图是否连通,然后还能记录出入度根据之前定理判定。然后通过深搜并且标记每一条走过的边确定是否有欧拉路径(回路),算法整体思路较简单,关键是能否想到利用欧拉路径(回路)建立模型。

哈密顿图:

在图为无向连通图的前提下,哈密顿通路:经过每个顶点一次且仅一次,若最终回到出发点则称为哈密顿图,哈密顿图为NP完全问题,暂不存在多项式时间内的解法

相关判定条件(图无向且连通)

(1)若图有n个结点的无向图且任意两个不同的结点度数之和均大于n,则此图为哈密顿图(存在哈密顿回路),此为判断是否是哈密顿图的充分条件,也就是说满足这个条件一定是哈密顿图,但哈密顿图不一定必满足这个条件。

算法:(前提是图有n个结点的无向图且任意两个不同的结点度数之和均大于n)

选取任意结点作为S,与其相邻一结点为T,然后逐步向两边扩展至无法扩展为止,若此时S与T连通,则判断是否S->T中包含全部点,若不连通则查找S->T中结点v[i]与T相邻且v[i+1]与S相邻的点,即S->v[i]->v[i+1]->T,而此时S ->V[i+1],T->V[i],将V[i+1]及其后部分翻转可构成S->v[i]->T->v[i+1]的哈密顿回路,判断此时是否路径包含全部结点,若不包含,查找不属于回路中但与其中结点相邻的结点,然后可将此回路缩为一点(因为已经求得当前回路为哈密顿回路)再修改S、T重复上述过程。

欧拉路径(回路)相关题目:UVA10054、POJ2230、HDU1116

哈密顿(回路)相关题目:POJ2438

UVA10054(每一个珠子首尾连接构成无向图)

原创粉丝点击