zoukankan      html  css  js  c++  java
  • 回溯法>哈密顿环 小强斋

    哈密顿环

    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)。

  • 相关阅读:
    redux
    ajax跨域例子
    flux
    BSON数据格式
    JS代码风格自动规整工具Prettier
    JS通用模块模式 UMD
    Promise库
    webpack打包理解
    前端自动提示功能插件-typeahead
    socket.io emit callback调用探秘
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5637361.html
Copyright © 2011-2022 走看看