import java.util.Arrays; import java.util.Stack; /** * 迷宫 * * @author 风华褚胜 */ public class MiGong { public static void main(String[] args) { Stack<Position> stack = new Stack<Position>(); // 保存迷宫路径 Stack<Object[]> end = new Stack<Object[]>();// 保存可通路路径 new MiGong().f(getMiGong(), 1, 1/* 是起始坐标 */, 8, 8/* 是终点坐标 */, 0/* 上一步的方向 */, stack, end); int shor = Integer.MAX_VALUE; int index = 0; for (int i = 0; i < end.size(); i++) { if (shor > end.get(i).length) { index = i; shor = end.get(i).length; } } if (end.size() != 0) { System.out.println("最短路径:"); System.out.println(Arrays.toString(end.get(index))); } else System.out.println("无通路"); } public static int[][] getMiGong() { // int[][] num = { { 1, 1, 1, 1, 1 }, // { 1, 0, 1, 1, 1 }, // { 1, 0, 1, 1, 1 }, // { 1, 0, 0, 0, 1 }, // { 1, 1, 0, 0, 1 }, // { 1, 1, 1, 1, 1 } }; int[][] num = { { 1, 1, 1, 1, 1, 1, 1, 1, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 0, 1, 1, 0, 1, 1, 0, 1 }, { 1, 0, 1, 0, 0, 1, 0, 0, 1 }, { 1, 0, 1, 0, 1, 0, 1, 0, 1 }, { 1, 0, 0, 0, 0, 0, 1, 0, 1 }, { 1, 1, 0, 1, 1, 0, 1, 1, 1 }, { 1, 0, 0, 0, 0, 0, 0, 0, 1 }, { 1, 1, 1, 1, 1, 1, 1, 1, 1 } }; return num; } /** * 求取所有路径 * * @param num * 迷宫矩阵 * @param start_row * 开始坐标x * @param start_col * 开始坐标y * @param end_row * 结束坐标x * @param end_col * 结束坐标y * @param dro * 上一步走的方向 * @param s * 保存迷宫路径 * @param end * 保存可通路路径 */ public void f(int[][] num, int start_row, int start_col, int end_row, int end_col, int dro, Stack<Position> s, Stack<Object[]> end) { // System.out.println(Arrays.toString(s.toArray())); s.push(new Position(start_row, start_col)); if (start_row == end_row && start_col == end_col) { System.out.println(Arrays.toString(s.toArray())); end.push(s.toArray()); s.pop(); return; } num[start_row][start_col] = 1; if (dro != 2 && num[start_row - 1][start_col] == 0) { f(num, start_row - 1, start_col, end_row, end_col, 1, s, end); } if (dro != 1 && num[start_row + 1][start_col] == 0) { f(num, start_row + 1, start_col, end_row, end_col, 2, s, end); } if (dro != 4 && num[start_row][start_col - 1] == 0) { f(num, start_row, start_col - 1, end_row, end_col, 3, s, end); } if (dro != 3 && num[start_row][start_col + 1] == 0) { f(num, start_row, start_col + 1, end_row, end_col, 4, s, end); } num[start_row][start_col] = 0; s.pop(); return; } /** * 坐标点的表示类 * * @author 风华褚胜 */ class Position { public int row; public int col; public Position(int row, int col) { this.row = row; this.col = col; } @Override public String toString() { return "(" + row + "," + col + ")"; } } }
java程序走矩阵迷宫
猜你喜欢
转载自lshj.iteye.com/blog/2247340
今日推荐
周排行