大家好,在这段代码中,我希望找到退出迷宫的所有路径,在某些情况下,对于一个退出主页,您有多个路径,我想选择最短路径,我应该如何将此未来添加到下面的代码,下面代码是我查找路径的算法,但它找不到所有路径
public void searchPath(char[][] BW, int i , int j ){ // megdar avalie i = SX-1 ,megdar avalie j= SY-1
if(i<0 || i>(N-1)) return; // check out of bound
if(j<0 || j>(N-1)) return;
if(BW[i][j] == 'b') return; // if cell is black return
if(visit[i][j]== true) return;
visit[i][j] = true;
path.add(i+","+j);
if( !(i==SX-1 && j==SY-1 )){
if(i==0 || i==N-1 || j==0 || j==N-1) {
if(first){
//first = false;
drawWay(path);
}
}
}
searchPath(BW , i , j+1); // right
searchPath(BW , i-1 , j); // search the up side of cell
searchPath(BW , i , j-1); // left
searchPath(BW , i+1 , j); // search the down
path.remove(path.size()-1); // remove the not necceccery path
}
答案 0 :(得分:0)
我不确定我是否做对了 - 首先你说要找到所有可能的路径退出迷宫,但是你提到找到最短路径。
实际上,你可以用同样的方法解决你的两个问题。您当前正在算法中使用深度优先搜索(http://en.wikipedia.org/wiki/Depth-first_search)。它尽可能地深入,当没有其他方法可去时,它会返回 - 因此得名。
您应该使用的是广度优先搜索(http://en.wikipedia.org/wiki/Breadth-first_search)。这样,您将遍历层中的迷宫 - 在ith
&#34; round&#34;中,您将访问距离家庭广场i
个方格的所有位置。因此,当你现在到达边境广场时,它必须是最短路径。 BFS可以使用队列实现。
要找到所有可能的解决方案,您必须使用额外的空间才能记住从哪个位置到达当前位置。然后,当你想要从位置i,j找回回家的路时,你将当前位置写入输出,然后查看i,j的先前位置数组。现在你有i,j - k,l的前身并对它们做同样的事情 - 输出k,l并查看k,l的前辈的数组。重复这一步,直到你回到家里&#34;。
我会给你发一些代码,但我不懂Java,所以我不想让你迷惑。 ;)