题目描述:
输入m,n,表示地图的大小,地图用0和1来表示,表示障碍和空地,再输入小哼的起始点,和小哈的位置
输出最小的步数
输入样例:
5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
0 0 3 2
take notes:广搜的特点层层递进,需要用一个队列来存储结构体
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class 解救小哈广搜 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
Queue<node> qe = new LinkedList<node>();
int[][] mp = new int[55][55];
int[][] book = new int[55][55];
int[][] next = {{0,1},{1,0},{0,-1},{-1,0}};
int m=in.nextInt();
int n=in.nextInt();
int tx,ty;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
mp[i][j] = in.nextInt();
}
}
int startx=in.nextInt();
int starty=in.nextInt();
int p=in.nextInt();
int q=in.nextInt();
int step=0;
node no = new node(startx, starty,step);
qe.add(no);
book[startx][starty]=1;
main:while(qe.size()!=0){
for(int i=0;i<=3;i++){
tx=qe.peek().x+next[i][0];
ty=qe.peek().y+next[i][1];
if(tx<0||tx>=m||ty<0||ty>=n)continue;
if(mp[tx][ty]==0&&book[tx][ty]==0){
book[tx][ty]=1;
qe.add(new node(tx,ty,qe.peek().s+1));
step=qe.peek().s;
}
if(tx==p&&ty==q){System.out.println(step+1);
break main;
}
}
step++;
qe.poll();
}
}
}
class node{
int x;
int y;
int s;
node(int x,int y,int s){
this.x=x;
this.y=y;
this.s=s;
}
}