博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
回溯法---->哈密顿环
阅读量:6090 次
发布时间:2019-06-20

本文共 1180 字,大约阅读时间需要 3 分钟。

哈密顿环

1、问题描述

设G =(V,E)是一个n 结点的连通图。一个哈密顿环是一条沿着图G 的n 条边环行的路径, 它访问每个结点一次并且返回到它的开始位置。

图G1含有一个哈密顿环1->2 -> 8 -> 7 -> 6 -> 5 -> 4 -> 3 -> 1

2、找下一个结点的算法

过程NEXTVALUE给出了在求哈密顿环的过程中如何找下一个结点的算法。

procedure NEXTVALUE( k)

∥X(1)  , ⋯ ,  X( k - 1) 是一条有k - 1 个不同结点的路径。若X( k ) = 0 , 则表示再无结点可分配给X(k) 。若还有与X(1) , ⋯  ,X( k - 1) 不同且与X( k - 1) 有边相连接的结点, 则将其中标数最高的结点置于X(k) 。若k = n , 则还需与X(1) 相连接∥

global integer n , X( 1∶n) , boolean GRAPH (1∶n , 1∶n)

integer k , j

loop

X( k )←  (X(k) + 1) mod ( n + 1) ∥下一个结点∥

if X( k) = 0 then return endif

if GRAPH (X( k - 1 ) , X( k) ) ∥有边相连吗∥

then for j←1 to k - 1 do ∥检查与前k - 1 个结点是否相同∥

if X( j ) = X( k)

then exit ∥有相同结点, 出此循环∥

endif

repeat

if  j = k ∥若为真, 则是一个不同结点∥

then  if k < n or ( k = n and GRAPH(X( n ) , 1 ) ) then return

endif

endif

endif

repeat

end NEXTVALUE

3、找所有的哈密顿环

procedure H AMILTONIAN( k )

∥这是找出图G中所有哈密顿环的递归算法。图G用它的布尔邻接矩阵GRAP H(1∶n ,1

∶n)表示。每个环都从结点1开始

global integer X(1∶n)

local integer k , n

loop ∥生成X( k) 的值∥

call NEXTVALUE(k ) ∥下一个合法结点分配给X( k) ∥

if X( k) = 0 then return endif

if k = n

then print (X,‘1’) ∥打印一个环∥

else call H AMILTONIAN( k + 1)

endif

repeat

end HAMILTONIAN

这个过程首先初始化邻接矩阵GRAPH(1∶n ,1∶n), 然后置X(2∶n) ←0 ,X( 1) ←1 ,再执行callHAMILTONIAN( 2)。

你可能感兴趣的文章
report widget not working for external users
查看>>
windows phone 摄像头得到图片是旋转90°
查看>>
Linux--sed使用
查看>>
没有显示器的情况下安装和使用树莓派
查看>>
【android】使用handler更新UI
查看>>
mochiweb 源码阅读(十五)
查看>>
前端面试中的常见的算法问题
查看>>
计算机语言的基本理论
查看>>
nodejs流之行读取器例子
查看>>
批量文件重命名工具
查看>>
简单说一下UWP中的JumpList
查看>>
unity将object[]或者string对象转换成枚举enum
查看>>
以太坊系列之六: p2p模块--以太坊源码学习
查看>>
使用scikit-learn解决文本多分类问题(附python演练)
查看>>
2018 年最值得关注的 JavaScript 趋势
查看>>
什么是区块链?超级账本 Brian Behlendorf 从五个方面教你认识
查看>>
Linux中的帮助功能
查看>>
针对Android的Pegasus恶意软件版本和针对iOS的有什么不同?
查看>>
全局探色器
查看>>
Hive Export和Import介绍及操作示例
查看>>