原本自己用dfs水过了这题,但后来看了别人的题解后发现,原来这题还大有名堂:竞赛图。
竞赛图就是任意两点之间有且仅有一条有向边的图, 可以证明竞赛图一定存在哈密尔顿道路。
证明如下:
假设节点V0....Vk存在哈密尔顿道路,则添加节点Vk+1时有以下三种情况:
(1)Vk+1到V0存在有向边,则把Vk+1插到V0的前面,此时仍存在哈密尔顿道路
(2)Vk到Vk+1存在有向边,则把Vk+1放到Vk的后面,此时仍存在哈密尔顿道路
(3)如果前面两种情况都不满足,则从0...k之间,肯定存在一个节点K,使得Vi到Vk+1存在有向边,且Vk+1到Vi+1存在有向边,此时将Vk+1插到Vi和Vi+1之间,容易证明此时仍然存在哈密尔顿道路
细心的同学会发现这跟链表很相似,所以代码就很容易敲出来了。
同样地,也附上我用暴力过的代码