题目描述
blablabla
样例
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
/**
* Created with IntelliJ IDEA.
* Mail: 761472239@qq.com
* Date: 2019-12-05
* Time: 17:20
* Description:
*/
public class 走迷宫 {
static int map[][] = null;
static int n = 0;
static int m = 0;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
n = sc.nextInt();
m = sc.nextInt();
map = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
map[i][j] = sc.nextInt();
}
}
fbs(n, m);
}
}
private static void fbs(int n, int m) {
int[][] d = new int[n][m];//记录走过的点,把0变为1
Queue<Node> q = new LinkedList<Node>(); /初始化队列
int fx[][] = new int[][]{{1, 0}, {0, 1}, {-1, 0}, {0, -1}};//方向四个都懂
q.offer(new Node(0, 0));//加入起点0,0
//queue.poll(); 返回第一个元素,并在队列中删除
while (!q.isEmpty()) {
Node node = q.poll();
if (node.x == n - 1 && node.y == m - 1) {//判断是否到终点
break;
}
for (int i = 0; i < 4; i++) { //四个方向都要判断一下
int x = node.x + fx[i][0];
int y = node.y + fx[i][1];
if (x >= 0 && y >= 0 && x < n && y < m && map[x][y] == 0 && d[x][y] == 0) {//判断边界,是否可走。
q.add(new Node(x, y));
d[x][y] = d[node.x][node.y] + 1;//由0变为1
}
}
}
System.out.println(d[n - 1][m - 1]);
}
}
class Node {
int x;
int y;
public Node(int x, int y) {
this.x = x;
this.y = y;
}
}
同学,你程序里的注释是不有些小问题啊,d[x][y] = d[node.x][node.y] + 1 的意思并不是将0变为1,而是表示由左上角走到当前(x,y)位置最少需要多少步。d[][]数组既有记录是否访问过的功能,也包含了到当前位置的最短路径
认同^ ^