我尝试使用 Mathematica 在下图中找到一个汉密尔顿循环:
g = Graph[{1 \[UndirectedEdge] 2, 1 \[UndirectedEdge] 6,
2 \[UndirectedEdge] 4, 1 \[UndirectedEdge] 3,
3 \[UndirectedEdge] 4, 4 \[UndirectedEdge] 5,
5 \[UndirectedEdge] 6, 3 \[UndirectedEdge] 9,
4 \[UndirectedEdge] 7, 7 \[UndirectedEdge] 8,
8 \[UndirectedEdge] 11, 5 \[UndirectedEdge] 8,
5 \[UndirectedEdge] 12, 6 \[UndirectedEdge] 12,
9 \[UndirectedEdge] 10, 10 \[UndirectedEdge] 11,
11 \[UndirectedEdge] 12, 9 \[UndirectedEdge] 15,
15 \[UndirectedEdge] 16, 16 \[UndirectedEdge] 17,
16 \[UndirectedEdge] 19, 19 \[UndirectedEdge] 20,
20 \[UndirectedEdge] 23, 20 \[UndirectedEdge] 17,
17 \[UndirectedEdge] 18, 15 \[UndirectedEdge] 21,
18 \[UndirectedEdge] 24, 21 \[UndirectedEdge] 22,
22 \[UndirectedEdge] 23, 23 \[UndirectedEdge] 24,
3 \[UndirectedEdge] 15, 14 \[UndirectedEdge] 15,
14 \[UndirectedEdge] 12, 22 \[UndirectedEdge] 15,
12 \[UndirectedEdge] 18, 11 \[UndirectedEdge] 13,
13 \[UndirectedEdge] 14, 13 \[UndirectedEdge] 10,
1 \[UndirectedEdge] 10, 12 \[UndirectedEdge] 24},
VertexLabels -> "Name"]
然后
EdgeList[g, 4 \[UndirectedEdge] _]
表明 4 与 2,3,5,7 相连
但是代码
First[FindHamiltonianCycle[g]]
返回错误,即
{1 \[UndirectedEdge] 2, 2 \[UndirectedEdge] 4, 4 \[UndirectedEdge] 8,
8 \[UndirectedEdge] 9, 9 \[UndirectedEdge] 6, 6 \[UndirectedEdge] 3,
3 \[UndirectedEdge] 11, 11 \[UndirectedEdge] 21,
21 \[UndirectedEdge] 19, 19 \[UndirectedEdge] 15,
15 \[UndirectedEdge] 14, 14 \[UndirectedEdge] 16,
16 \[UndirectedEdge] 17, 17 \[UndirectedEdge] 18,
18 \[UndirectedEdge] 22, 22 \[UndirectedEdge] 20,
20 \[UndirectedEdge] 13, 13 \[UndirectedEdge] 23,
23 \[UndirectedEdge] 24, 24 \[UndirectedEdge] 10,
10 \[UndirectedEdge] 12, 12 \[UndirectedEdge] 7,
7 \[UndirectedEdge] 5, 5 \[UndirectedEdge] 1}
为什么mathematica 从4 到8 占据优势,因为它不存在?算法有错误还是我做错了什么?
顺便说一句,我正在使用 Mathematica 8。