哈密顿回路
1.哈密顿回路
图G的一个回路,该回路除了经过初始结点两次以外,恰好经过每个结点一次,则称此回路为哈密顿回路。哈密顿回路中每个结点都为偶结点且入度和出度均为1
2.哈密顿路径
一条路径上每个节点仅经过一次的路径称为哈密顿路径
3.哈密顿通路
含有图G所有节点的哈密顿路径称为哈密顿通路
4.哈密顿图
含有哈密顿回路的图
竞赛图
简介
图G是一个有向图,其中每对不同的顶点通过单个有向边连接,即每对顶点之间都有一条边相连,那么图G称为竞赛图,含n个节点的竞赛图称为n阶竞赛图
性质
- n(n>2)阶竞赛图一定含有哈密顿路径
- 竞赛图存在哈密顿回路的充要条件是强连通
构造哈密顿回路
狄拉克定理
1.任意找两个相邻的节点S和T,在其基础上扩展出一条尽量长的没有重复结点的路径。即如果S与结点v相邻,而且v不在路径S -> T上,则可以把该路径变成v -> S -> T,然后v成为新的S。从S和T分别向两头扩展,直到无法继续扩展为止,即所有与S或T相邻的节点都在路径S -> T上
2.若S与T相邻,则路径S -> T形成了一个回路
3.若S与T不相邻,可以构造出来一个回路.设路径S -> T上有k+2个节点,依次为S, v1, v2, …, vk, T.可以证明存在节点vi(i属于[1, k]),满足vi与T相邻,且vi+1与S相邻.找到这个节点vi,把原路径变成S -> vi -> T -> vi+1 ,即形成了一个回路
4.到此为止,已经构造出来了一个没有重复节点的的回路,如果其长度为N,则哈密顿回路就找到了。如果回路的长度小于N,由于整个图是连通的,所以在该回路上,一定存在一点与回路之外的点相邻。那么从该点处把回路断开,就变回了一条路径,同时还可以将与之相邻的点加入路径。再按照步骤1的方法尽量扩展路径,则一定有新的节点被加进来。接着回到路径2
时间复杂度
由于每一轮当中至少有一个节点被加入到路径S -> T中,所以总的轮数肯定不超过n轮,所以时间复杂度为O(n2).空间上由于边数非常多,所以采用邻接矩阵来存储比较适合