迷宫算法找到所有路径(和最短路径)

时间:2015-04-11 18:05:13

标签: java algorithm maze

大家好,在这段代码中,我希望找到退出迷宫的所有路径,在某些情况下,对于一个退出主页,您有多个路径,我想选择最短路径,我应该如何将此未来添加到下面的代码,下面代码是我查找路径的算法,但它找不到所有路径

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


    }

1 个答案:

答案 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,所以我不想让你迷惑。 ;)