题目描述:
迷宫求最短路径。
只能走上、下,左、右四个方向。
输入:
输入只有一个用例。
第一行为迷宫大小,n,m,即n行m列,
第二行为起点位置,
第三行为终点位置,
接下来的为迷宫图,1表示墙壁,0表示通道输出:
输出从起点到终点的最短路径,即最少走的步数
输入样例:
10 10
2 2
9 9
1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 1 0 1
1 0 0 1 0 0 0 1 0 1
1 0 0 0 0 1 1 0 0 1
1 0 1 1 1 0 0 0 0 1
1 0 0 0 1 0 0 0 0 1
1 0 1 0 0 0 1 0 0 1
1 0 1 1 1 0 1 1 0 1
1 1 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1
输出样例:
14
代码:
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import java.util.Scanner;public class no59 {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = in.nextInt();int m = in.nextInt();int sx = in.nextInt();int sy = in.nextInt();int ex = in.nextInt();int ey = in.nextInt();int[][] map = new int[110][110];for(int i = 1;i <= n;i ++)for(int j = 1;j <= m;j ++)map[i][j] = in.nextInt();System.out.printf("%d",bfs(n,m,sx,sy,map,ex,ey));}public static int bfs(int n,int m,int sx,int sy,int[][] map,int ex,int ey){int[][] book = new int[110][110];int[] dx = {1,-1,0,0};int[] dy = {0,0,1,-1};int[][] lu = new int[110][110];Queue<Node> q = new LinkedList<>();q.offer(new Node(sx,sy));book[sx][sy]=1;while(!q.isEmpty()){Node t = q.peek();q.poll();if(t.x == ex && t.y == ey){return lu[ex][ey];}for(int i = 0;i < 4;i ++){int qx = t.x + dx[i];int qy = t.y + dy[i];if(qx>0&&qy>0&&qx<=n&&qy<=m&&book[qx][qy]==0&&map[qx][qy]==0){book[qx][qy] = 1;lu[qx][qy] = lu[t.x][t.y] + 1;q.offer(new Node(qx,qy));}}}return lu[ex][ey];}static class Node{int x;int y;public Node(int x, int y) {this.x = x;this.y = y;}}
}