经过思考蒜头君终于解决了怎么计算一个迷宫的最短路问题,于是蒜头君找到一个新的迷宫图,来验证自己是否真的会计算一个迷宫的最短路。
为了检验自己计算的是否正确,蒜头君特邀你一起来计算。
输入格式
第一行输入两个整数 nn 和 mm,表示这是一个 n \times mn×m 的迷宫。
接下来的输入一个 nn 行 mm 列的迷宫。其中’@‘表示蒜头君的位置,’#‘表示墙,蒜头君无法通过,’.‘表示路,蒜头君可以通过’.‘移动,所有在迷宫最外围的’.'都表示迷宫的出口(蒜头君每次只能移动到四个与他相邻的位置——上,下,左,右)。
输出格式
输出整数,表示蒜头君逃出迷宫的最少步数,如果蒜头君无法逃出迷宫输出 -1−1。
数据范围
1 \le n,m \le 151≤n,m≤15。
输出时每行末尾的多余空格,不影响答案正确性
样例输入1 复制
9 13
#############
#@…#
#####.#.#.#.#
#…#
#.#.#.#.#.#.#
#.#…#.#
#.#.#.#.#.#.#
#…#
#####.#######
样例输出1 复制
11
样例输入2 复制
4 6
#.####
#.#.##
#…@#
样例输出2 复制
5
套用bfs模板,java还是不能用自带的队列,用数组比较快
mport java.util.Scanner;
/**
* Created on 10:10 24/02/2020
* Description:
*
* @author Weleness
*/
public class Main {
static int N = 3000;//N需开大点
static int r, c;
static char[][] map = new char[N][N];//用于保存地图
static boolean[][] vis = new boolean[N][N];//标识是否访问过的点
static int[][] dir = {
{
-1, 0}, {
1, 0}, {
0