解决迷宫的最快算法

时间:2014-10-31 04:09:02

标签: algorithm sorting dijkstra depth-first-search maze

让我们说你有一个迷宫。例如:

#  ########
#    #    #
# #### #  #
# #    #  #
# #  # ####
#   #  #  #
# ###  ## #
#   #     #
#######   #

您可以根据自己喜欢的任何数据结构来表示迷宫,例如图表,数组等。 什么是解决任意大小迷宫的最快/最有效的算法?

首先想到的算法是Dijkstra的算法,BFS和DFS。我不确定哪些(或任何其他算法)会“最好”。

2 个答案:

答案 0 :(得分:0)

由于所有相邻顶点之间的距离为1,因此DFS最佳。


nxm是数组矩阵的大小

 public static int min(int x , int y ,int endx,int endy,int n ,int m,int[][] dp){
         int[] dirx ={1,-1,0,0 };
            int[] diry={0,0,1,-1};
            LinkedList<Point> s = new LinkedList<Point>();
            s.add(new Point(x,y));
           dp[x][y]=0;  // For starting point

            while(!s.isEmpty()){
              Point xx = s.pop();
              for(int i=0;i<4;i++){

                  int x1 =  xx.x + dirx[i];
                  int y1  = xx.y + diry[i];

                  if(x1>=0 && x1<n && y1>=0 && y1<m && dp[x1][y1]!=-1){


                          som.add(new Point(x1,y1));
                          dp[x1][y1] = dp[xx.x][xx.y]+1;

                      }

                  }
              }





        return dp[endx][endy];
    }

答案 1 :(得分:0)

对于如上所述的迷宫问题,最广泛使用的算法是A *算法,其访问相邻节点是最佳方式,因此阻止访问所有图。你可以使用曼哈顿距离作为问题的启发式方法,并且非常有效地解决这个问题。

A* Algorithm