实验题目: 使用C++语言来判断基于邻接矩阵表示的图中是否存在哈密尔顿回路
实验目的: 学习哈密尔顿回路的概念, 和通过算法的代码实现来了解回溯算法的思想
下面是我在学习哈密尔顿回路的过程中,对自己提出的问题
1.什么是哈密尔顿回路?
2.哈密尔顿回路在实际应用中有什么作用?
3.在看过哈密尔顿路定义之后,是否在实际理论研究中一定要得出哈密尔顿回路,难道说哈密尔顿路就没有一定的研究价值了吗?
4. 从这个算法实现中,是否有什么可以借鉴的编程思想在里面?
5.这个算法能够使用递归的方法来实现呢,将递归算法与非递归算法二者之间进行转换的时候,是否存在着相关的固定思维模式,
或者是思考解决的方式呢?
下面是我对自己提出的问题的解答
1. 哈密尔顿回路的,是基于一位数学家想要环游世界的计划而提出的,数学家想要游历所有的国家,他希望找到一个这样的路径,
从起点出发,按照不重复游历任何一个国家的顺序,最终回到出发点。将它通过数学模型映射到图中对他进行表示就是,在一个
连通图中找到一个路径,通过该路径可以访问到图中的所有结点,并且可以不重复访问图中的任何一个节点,并且路径中的第一个
结点与路径中最后一个结点在图中也是连通的(不借助与任何中间结点直接可达)。
2.哈密尔顿回路的作用就我现在所知道的而言,在数字水印的时候,有一种给图像进行加密的方法是通过在图中增设哈密尔顿回路来实现的,
通常也被叫做是骑士游历的问题,其所基于的思想都是相同的。 还有一个就是在POJ中有一道相关的竞赛题目就是基于哈密尔顿回路的思想,
它的名字就叫做骑士游历问题。在实际应用中还有这更加复杂和广泛的应用,有兴趣可以自己去查资料。
3.这个问题是我自己想出来的,我觉得是这样的,哈密尔顿回路的提出所基于的思想模型就是游历然后回到原点,如果不是回路的话,
单纯找到这种路径意义不大。因为哈密尔顿路本质上就是找到连通图中连接所有节点的一条简单路径罢了,目前, 还没有仔细研究过找到图中连通
所有结点的一条路径的通用算法实现,如果哈密尔顿回路的回溯算法时间复杂度照比前者要好的话,也并非没有意义。
4.有一个关于在 for 循环中如果在其中设定了满足条件 break 的语句调用的话,这说明在这个 for 循环体内存在着两个出口,既然是存在两个出口的话,
那么在循环体之行结束退出的之后ÿ