在2个节点之间的网格中查找所有路径

时间:2010-10-25 08:20:59

标签: c path grid planning

我正在尝试找到网格中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中完成)。

3 个答案:

答案 0 :(得分:0)

看看它应该让你开始的最短路径问题。 Bellmann-Ford或Dijkstra的算法值得尝试。如果您的网格具有可以利用的某些属性,则可以提高效率。

答案 1 :(得分:0)

不,你不会错过任何事情,没有什么可以做得更快。

这是NP-Hard的Longest Path Problem

答案 2 :(得分:0)