应用回溯法算法解决哈密顿问题

(1)问题描述:

哈密顿回路的定义: G=(V,E)是一个图,若G中一条路径通过且仅通过每一个顶点一次,称这条路径为哈密顿路径。若G中一个回路通过且仅通过每一个顶点一次,称这个环为哈密顿回路。若一个图存在哈密顿回路,就称为哈密顿图。(提示:测试集可以随机构建顶点集和边集)

(2)设计数据结构:

图采用邻接矩阵arc[n][n]存储

数组x[n]存储哈密顿回路上的顶点

数组visited[n]存储顶点的访问状态,visited[i]=1表示哈密顿回路经过顶点i

(3)针对示例图,画图并描述搜索、剪枝与回溯过程

在解空间树从根结点1开始搜索,将x₁置为1,到达结点2,表示哈密顿回路从顶点1开始。

将x₂置为1,到达结点3,但顶点1重复访问,搜索结点2的兄弟子树,将x₂置为2,构成哈密顿回路的部分解(1,2)。

在经过结点5和结点6的试探后,将x₃置为3,构成哈密顿回路的部分解(1,2,3)。 在经过结点8、结点9和结点10的试探后,将x₄置为4,将哈密顿回路的部分解扩展到(1,2,3,4)。

在经过结点12、结点13、结点14和结点15的试探后,将x₅置为5,将哈密顿回路的部分解扩展到(1,2,3,4,5),但是从顶点5到顶点1没有边,引起回溯;将x₄置为5,到达结点17,构成哈密顿回路的部分解(1,2,3,5)。

在经过结点18、结点19和结点20的试探后,将x₅置为4,将哈密顿回路的部分解扩展到(1,2,3,5,4),由于从顶点4到顶点1存在边,找到一条哈密顿回路(1,2,3,5,4),搜索过程结束。

(4)设计算法伪码或画流程图:

(5)测试程序:

输入样例请输入顶点数:5

请输入邻接矩阵:

0 1 0 1 0

1 0 1 1 1

0 1 0 1 1

1 1 1 0 1

0 1 1 1 0

样例哈密顿回路为:1 2 3 5 4

(6)时间复杂性、空间复杂性:

时间复杂性是O(n!),空间复杂性是 O(n)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值