[英]maze algorithm to finding all path (and shortest path)
大家好,在此代碼中,我想找到所有退出迷宮的路徑,在某種情況下,一個退出家門,你有多個路徑,我想選擇最短路徑,我該如何將這個未來添加到下面的代碼中,下面的代碼是我的找到路徑的算法,但不是找到所有路徑
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
}
我不確定我是否正確-首先,您說您想找到所有可能的路徑來退出迷宮,但是隨后您提到了找到最短的路徑。
實際上,兩個問題都可以用相同的方法解決。 您當前正在算法中使用深度優先搜索( http://en.wikipedia.org/wiki/Depth-first_search )。 它越深越好,並且當沒有其他方法可走時,它會返回-故名。
相反,您應該使用廣度優先搜索( http://en.wikipedia.org/wiki/Breadth-first_search )。 這樣,您將在迷宮中逐層遍歷-在ith
“回合”中,您將訪問i
距離家園正方形的所有位置。 因此,當您現在到達邊界廣場時,它必須是最短的路徑。 BFS可以使用隊列來實現。
要找到所有可能的解決方案,您必須使用額外的空間,以便記住從哪個位置到達當前位置。 然后,當您要查找從位置i,j返回的原路時,您需要將當前位置寫入輸出,然后查看i,j先前位置的數組。 現在,您具有i,j-k,l的前任者,並對其進行相同的操作-輸出k,l並查看數組中k,l的前任者。 重復此過程,直到您“回到家”。
我會向您發布一些代碼,但是我不懂Java,所以我不想讓您感到困惑。 ;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.