我理解路径寻找的概念以及程序如何以最有效的方式从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)开始,向上,向下,向左,向上看,看看这些是否可能是动作,但我想出的任何版本都会遇到重复和重复计数。
答案 0 :(得分:1)
答案 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);
}