我正在尝试找到网格中2个节点之间的所有路径,并且路径必须从头到尾遍历所有节点。 示例(开始= S,结束= E)
0 0 0
0 S 0
0 0 E
上述答案有两条路径:(忽略'。's)
0-0-0
| ....... |
0 S-0
|
0-0-E
0-0-0
| ...... |
0 S 0
| ... | ... |
0-0 E
我想过使用递归,但是由于每次调用的高开销而放弃了...并且决定使用堆栈的迭代方法。 (有点像递归但不是......固定的内存开销)。 该解决方案非常适合大小(4x7)的网格,但是在8x8网格上进行了尝试......并且它在4小时内没有完成......这种情况很有意义,因为可能性的总数大约是3 ** 62(大约),因为不在边缘的每个节点有3种可能的遍历方式......因此该解决方案失败。
我想过将8x8网格划分为2,使用垂直和水平分割...但这会导致找到不太理想的路径。
有什么我想念的吗???? 可以做些什么来让它变得更快? 我将发布明天的解决方案(在C中完成)。
答案 0 :(得分:0)
看看它应该让你开始的最短路径问题。 Bellmann-Ford或Dijkstra的算法值得尝试。如果您的网格具有可以利用的某些属性,则可以提高效率。
答案 1 :(得分:0)
不,你不会错过任何事情,没有什么可以做得更快。
这是NP-Hard的Longest Path Problem。
答案 2 :(得分:0)