【问题标题】:Hamiltonian path using iGraph使用 iGraph 的哈密顿路径
【发布时间】:2014-12-20 20:37:06
【问题描述】:

我开始评估 igraph 库及其功能。 我需要计算 igraph_de_bruijn() 函数生成的图的哈密顿路径。 igraph 库中是否有任何现成的功能?我不想从头开始实现它。 C 中的示例将是完美的。

【问题讨论】:

    标签: igraph


    【解决方案1】:

    哈密顿路径问题可以转换为子图同构问题,igraph 有几个函数。构造一个与您的图具有相同顶点数的一维点阵图(一条“线”),然后使用子同构函数搜索此模式。

    这是一个使用 Mathematica interface 的示例。

    hamiltonianPath[g_] := 
     Values@First@IGLADGetSubisomorphism[
        GridGraph[{VertexCount[g]}],  (* <- this is just a 1D lattice, like O-O-O-O *)
        g                             (* <- this is the graph we want to match *)
     ]
    

    让我们尝试一个十二面体图:

    g = PolyhedronData["Dodecahedron", "SkeletonGraph"]
    

    这是需要访问顶点的顺序:

    path = hamiltonianPath[g]
    
    (* {1, 16, 7, 3, 14, 9, 17, 19, 5, 11, 12, 8, 4, 20, 6, 2, 13, 18, 10, 15} *)
    

    让我们想象一下:

    HighlightGraph[g, PathGraph[path], GraphHighlightStyle -> "Thick"]
    

    我使用 Mathematica 只是为了说明。使用C接口时,过程相同。

    当您这样做from C 时,您可以使用igraph_subisomorphic_lad 来查找单个 子同构(参见map 参数)。使用igraph_ring 创建模式(circular=false 用于哈密顿路径,circular=true 用于哈密顿循环)。如果您需要十二面体作为测试用例,可以通过igraph_famous 获取。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 2011-11-12
      • 2023-03-08
      • 2023-04-10
      相关资源
      最近更新 更多