2010-10-13 63 views
3

我有点理解寻路的概念,以及程序如何从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)开始,上下左右看这些是否可能的动作,但我遇到的任何版本都遇到重复和重复计数。

回答

1

我会看看flood fill算法。

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

我认为有办法来并行化这个确切的问题。

0

可以代表阵列图形(当1S是顶点和它们对应的1秒是相邻的两个顶点相连接。
然后找到图形的直径。(直径是最长的路径)。
。 就拿如何找到直径一看here

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); 
}