簡體   English   中英

找到所有路徑(和最短路徑)的迷宮算法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM