问题描述:
有如下一个8*7的迷宫,蓝色的小球如何移动到黑色小球的位置?
使用数组表示图像, 0表示没有走过,1表示墙,2表示通路可以走,3表示改点已经测试,无法走通。
public class Maze { public static void main(String[] args) { /** * 1 1 1 1 1 1 1 * 1 0 0 0 0 0 1 * 1 0 0 0 0 0 1 * 1 1 1 0 0 0 1 * 1 0 0 0 0 0 1 * 1 0 0 0 0 0 1 * 1 0 0 0 0 0 1 * 1 1 1 1 1 1 1 */ int[][] map = initMap(); printMap(map); searchWay(map,1,1); /** * 1 1 1 1 1 1 1 * 1 2 0 0 0 0 1 * 1 2 2 2 0 0 1 * 1 1 1 2 0 0 1 * 1 0 0 2 0 0 1 * 1 0 0 2 0 0 1 * 1 0 0 2 2 2 1 * 1 1 1 1 1 1 1 */ printMap(map); } private static int[][] initMap() { //初始化地图 int[][] map = new int[8][7]; //1表示边界 for (int i = 0; i < 7; i++) { map[0][i] = 1; map[7][i] = 1; } for (int i = 0; i < 8; i++) { map[i][0] = 1; map[i][6] = 1; } map[3][1] = map[3][2] = 1; return map; } private static void printMap(int[][] map) { System.out.println("打印开始了"); for (int i = 0; i < 8; i++) { for (int i1 : map[i]) { System.out.printf("%d\t", i1); } System.out.println(); } } /** * i,j表示开始的坐标 * 终点为6,5 * 0表示没有走过,1表示墙,2表示通路可以走,3表示改点已经测试,无法走通 * 策略为下->右->上->左 * * @param map 地图 * @param i * @param j * @return */ public static boolean searchWay(int[][] map, int i, int j) { if (map[6][5] == 2) { return true; } else { if (map[i][j] == 0) { map[i][j] = 2; if (searchWay(map, i + 1, j)) { return true; } else if (searchWay(map, i, j + 1)) { return true; } else if (searchWay(map, i - 1, j)) { return true; } else if (searchWay(map, i, j - 1)) { return true; } else { map[i][j] = 3; return false; } } else { return false; } } } }