利用广度优先遍历算法的特点,由于迷宫每次只能走一格,所以对于任意一个节点,bfs第一次到达该点时一定是最短路径
直接上代码:
package com.common.utils;import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Stack;/*** @ClassName Calculator* @Description: java迷宫寻找最短路径* @Author: mischen* @date: 14:57 2022/11/24* @Version 1.0*/
public class Maze {private class Node{int x;int y;public Node(int x, int y) {this.x = x;this.y = y;}}private int[][] map;//起点private int startX;private int startY;//终点private int endX;private int endY;//代表上下左右四个可能走的方向private int[] dx = {1,0,-1,0};private int[] dy = {0,1,0,-1};public Maze(int[][] map, int startX, int startY, int endX, int endY) {this.map = map;this.startX = startX;this.startY = startY;this.endX = endX;this.endY = endY;}public static void print(int[][] map) {for(int i=0; ifor(int j=0; j
运行结果:
-1 -1 -1 -1 -1 -1 -1 -1
-1 0 0 0 0 0 0 -1
-1 0 0 0 0 0 0 -1
-1 0 0 0 -1 0 0 -1
-1 -1 -1 0 -1 0 0 -1
-1 0 0 -1 0 0 0 -1
-1 0 0 0 0 0 0 -1
-1 -1 -1 -1 -1 -1 -1 -1
从(1,1)到(5,2)的最短距离是:13,路线为:
(1,1)->(2,1)->(2,2)->(2,3)->(2,4)->(2,5)->(3,5)->(4,5)->(5,5)->(6,5)->(6,4)->(6,3)->(6,2)->(5,2)->