给出迷宫地图与宝物地点,找出宝物最短路径?
Sample In
5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 1 4 3
Sample Out
7
import java.util.Scanner;
public class Main {
static int m,n;//地图大小
static int endX,endY;//搜索地点
static int minStep = 2147483647;//最小步数
static int [][]next = {{0,1},{1,0},{0,-1},{-1,0}};//顺时针右下左上
static int [][]a = new int[10][10] ;
static int [][]book = new int[10][19];
public static void dfs(int x,int y,int step){
if(x == endX && y==endY){
if(step<minStep)
minStep = step;
return;
}
for(int k=0;k<3;k++){
//计算下一个坐标
int tx = x + next[k][0];
int ty = y + next[k][1];
//判断是否越界
if(tx<1 ||tx>n||ty<1||ty>m)
continue;
//判断该店是否为障碍物或者已经走过
if(a[tx][ty]==0 && book[tx][ty]==0){
book[tx][ty] = 1;//标记已走过
dfs(tx,ty,step+1);//尝试下一个点
book[tx][ty] = 0;//取消标记
}
}
return;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
n = in.nextInt();
m = in.nextInt();
//地图读入
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
a[i][j] = in.nextInt();
}
}
//读入起点终点
int startX = in.nextInt();
int startY = in.nextInt();
endX = in.nextInt();
endY = in.nextInt();
book[startX][startY] = 1;
dfs(startX,startY,0);
System.out.println(minStep);
}
}