在多维数组中寻找路径

时间:2010-10-13 06:47:08

标签: c# multidimensional-array path-finding

我理解路径寻找的概念以及程序如何以最有效的方式从A点查找B点,并且模糊地熟悉A *的概念。但是,如果不是试图通过迷宫找到一条路,而是试图在封闭的迷宫中找到最长的走廊,走廊不能在对角线上。

这是我的示例迷宫:

1 1 0 1
0 0 1 1
1 0 1 0
1 0 1 0

如果使用1作为允许路径而0作为无效路径,则最长路径为5,坐标为(0,3),(1,2),(1,3),(2,2), (3,2)。

我如何递归地找到这些信息?

我一直在讨论如何从(0,0)开始,向上,向下,向左,向上看,看看这些是否可能是动作,但我想出的任何版本都会遇到重复和重复计数。

3 个答案:

答案 0 :(得分:1)

我会看一个flood fill算法。

基本上从第一个1开始 - 从那里填充洪水,并计算填充的位置。将它们设置为0(即使你去),然后重复。

我认为有一些方法可以并行化这个问题。

答案 1 :(得分:0)

您可以将数组表示为图形(当1s是顶点时,如果相应的1是相邻的,则连接两个顶点。
然后找到图表的直径。 (直径是最长的路径) 看看如何找到直径here

答案 2 :(得分:0)

DFS正是您想要的。代码必须如下所示:

int[,] map = InitTheMapHere();
int longest = -1;
int currentLength = 0;
void TryStep(int x,int y)
{
   if (map[x][y]==0 or over the edge)  //update the longest and return

      TryStep(go up);
      TryStep(go down);
      TryStep(go left);
      TryStep(go right);
}