我正在寻找一些正确方向的建议/指导。
我的要求是生成一个图表,而不是解决一个解决方案。
我正在寻找一种算法来生成一个只有 1 个哈密顿循环的图(NxN 网格)。请注意,只有一种独特的解决方案至关重要。该图将是一个 NxN 节点网格,每个节点只有 4 个相邻节点,即顶部、右侧、底部、左侧。节点只能访问一次。除此之外,还可以有一些特殊的节点。
- 死节点,即它们没有边缘连接
- 固定入口和出口节点,即入口和出口节点已经定义,没有其他节点可以与给定节点连接。它可以是一个。相邻节点 b. 直节点
一些例子:
@ - means that nodes can be connected with adjacent nodes (top,right,bottom,left)
$ - indicated dead end (no connections with adjacent nodes)
Graph 1 =>
@-@-@
@-$-@
@-@-@
Solution 1 =>
1-2-3
8-$-4
7-6-5
here the solution of the graph is 1->2->3->4->5->6->7->8->1. Notice how the $ node was not included in the final solution.
我的方法:
我采用*n 网格并首先在图表上放置随机死节点。在此之后,我放置随机的特殊节点。然后我运行一个遍历整个网格的 dfs 搜索,以查看是否存在满足特殊节点条件的有效循环,并且只访问每个节点一次(起始节点除外)并在起始节点处结束,使其成为一个完整的循环。
我的问题:
我在这里要问的是如何确保图表只有 1 个有效循环。我可以做的一件事是通过在每个循环之后添加更多死节点和特殊节点来递归迭代级别,直到有效哈密顿循环的数量减少到一个。这就是我计划实施的。
你会如何理想地解决这个问题?