结果又是翻车在了小细节上,细节是重点,一定要谨慎啊——啊—啊…终于终于捣鼓出来啦~
4.2 迷宫问题 深度优先搜索
static int[][] maze=new int[50][50]; //迷宫二维数组
static int[][] book=new int[50][50]; //是否走过
static int min=88888;
static int x1,y1,x2,y2,n,m;
public void mazeToNext(int x,int y,int step){
int nx,ny;
if(x==x2&&y==y2){ //到达了目的地
if(step<min)
min=step; //获取最小值
return;
}
int[][] k={
{0,1},
{1,0},{0,-1},{-1,0}};
for(int i=0;i<4;i++){
nx=x+k[i][0];
ny=y+k[i][1];
if(nx<1||nx>n||ny<1||ny>m)
continue;
if(maze[nx][ny]==0&&book[nx][ny]==0){
book[nx][ny]=1;
mazeToNext(nx,ny,step+1);
book[nx][ny]=0; //换个方向走
}
}
return;
}
public static void main(String[] args){
algorithm test = new algorithm();
Scanner sc=new Scanner(System.in);
System.out.println("请输入迷宫行宽列宽:");
n=sc.nextInt();
m=sc.nextInt();
System.out.println("请输入迷宫:");
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
maze[i][j]=sc.nextInt();
}
System.out.println("请输入小哼出发位置:");
x1=sc.nextInt();
y1=sc.nextInt();
System.out.println("请输入小哈被困位置:");
x2=sc.nextInt();
y2=sc.nextInt();
for(int i=1;i<=n;i++) {
for (int j = 1; j <=m; j++)
book[i][j] = 0;
}