我开始评估igraph库及其功能。 我需要计算由igraph_de_bruijn()函数生成的图的哈密顿路径。 igraph库中有没有现成的功能?我不想从头开始实现它。 C中的一个例子是完美的。
答案 0 :(得分:2)
哈密顿路径问题可以作为子图同构问题投射,其中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
来获取它。