Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 求解迷宫的最快算法_Algorithm_Sorting_Dijkstra_Depth First Search_Maze - Fatal编程技术网

Algorithm 求解迷宫的最快算法

Algorithm 求解迷宫的最快算法,algorithm,sorting,dijkstra,depth-first-search,maze,Algorithm,Sorting,Dijkstra,Depth First Search,Maze,假设你有一个迷宫。例如: # ######## # # # # #### # # # # # # # # # #### # # # # # ### ## # # # # ####### # 您可以用您喜欢的任何数据结构来表示迷宫,例如图形、数组等。 解决任意大小迷宫的最快/最有效算法是什么 首先想到的算法是Dijkstra算法、BFS和DFS。不过,我不确定这些(或任何其他算法)哪一个是“最好的” 因为所有相邻顶点彼此之间的距离为1,所以DF

假设你有一个迷宫。例如:

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


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

因为所有相邻顶点彼此之间的距离为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];
    }
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 s=新建LinkedList();
s、 添加(新点(x,y));
dp[x][y]=0;//用于起点
而(!s.isEmpty()){
第xx点=s.pop();

对于(int i=0;i=0&&x1=0&&y1对于上述迷宫问题,最广泛使用的算法是A*算法,该算法访问相邻节点是一种最佳方式,因此防止访问所有图形。您可以使用曼哈顿距离作为问题的启发式方法,并非常有效地解决此问题

看一看。