让我们说你有一个迷宫。例如:
# ########
# # #
# #### # #
# # # #
# # # ####
# # # #
# ### ## #
# # #
####### #
您可以根据自己喜欢的任何数据结构来表示迷宫,例如图表,数组等。 什么是解决任意大小迷宫的最快/最有效的算法?
首先想到的算法是Dijkstra的算法,BFS和DFS。我不确定哪些(或任何其他算法)会“最好”。
答案 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 *算法,其访问相邻节点是最佳方式,因此阻止访问所有图。你可以使用曼哈顿距离作为问题的启发式方法,并且非常有效地解决这个问题。