Прямоугольный массив M × N представляет лабиринт, а 0 и 1 представляют пути и препятствия в лабиринте, соответственно. Создайте программу, чтобы найти путь от входа к выходу для любого лабиринта настройки, или сделать вывод, что пути нет.
(1) Выведите график лабиринта в соответствии с двумерным массивом.
(2) Исследуйте четыре направления лабиринта: справа находится вправо, вниз находится вниз, слева находится слева, а вверх - вверх, и вытащите путь ходьбы от входа к выходу.
пример:
Верхний левый угол (1, 1) является входом, а правый нижний угол (8, 9) - выход.
Вы можете использовать метод отступа, то есть начиная с входа и изучения в определенном направлении. Если это можно сделать, продолжайте двигаться вперед; В противном случае отступите по исходному пути, продолжайте исследовать в другом направлении до положения выхода и найти путь. Если все возможные пути исследуются, и выход не достигнут, набор лабиринтов не имеет пути.
Import java.util.*; Class Position {public pocitire () {} public pociation (int row, int col) {this.col = col; this.row = row; } public String toString () {return "(" + row + "," + col + ")"; } int row; int col;} класс Maze {public maze () {maze = new int [15] [15]; Stack = new Stack <fosive> (); P = новый логический [15] [15]; } /** Конструирование лабиринта* / public void init () {Scanner Scanner = новый сканер (System.in); System.out.println («Пожалуйста, введите количество рядов лабиринта»); row = scanner.nextint (); System.out.println («Пожалуйста, введите количество столбцов лабиринта»); col = scanner.nextint (); System.out.println ("Пожалуйста, введите" + row + "row" + col + "лабиринт столбца"); int temp = 0; for (int i = 0; i <row; ++ i) {for (int j = 0; j <col; ++ j) {temp = scanner.nextint (); Лабиринт [i] [j] = temp; p [i] [j] = false; }}} /** Вернитесь в лабиринт, чтобы увидеть, есть ли выход* / public void findpath () {// Дайте круг стен вокруг домов исходного лабиринта int temp [] [] = new int [row + 2] [col + 2]; for (int i = 0; i <row +2; ++ i) {for (int j = 0; j <col +2; ++ j) {temp [0] [j] = 1; Temp [row + 1] [j] = 1; temp [i] [0] = temp [i] [col + 1] = 1; }} // Скопировать исходный лабиринт в новый лабиринт для (int i = 0; i <row; ++ i) {for (int j = 0; j <col; ++ j) {temp [i +1] [j +1] = maze [i] [j]; }} // Запуск запроса по часовой стрелке из верхнего левого углу int i = 1; int j = 1; p [i] [j] = true; stack.push (новая позиция (i, j)); while (! Stack.empty () && (! (i == (row) && (j == col))))) {if (temp [i] [j + 1] == 0) && (p [i] [j + 1] == false)) {p [i] [j + 1] = true; stack.push (новая позиция (i, j + 1)); J ++; } else if ((temp [i + 1] [j] == 0) && (p [i + 1] [j] == false)) {p [i + 1] [j] = true; stack.push (новая позиция (i + 1, j)); i ++; } else if ((temp [i] [j - 1] == 0) && (p [i] [j - 1] == false)) {p [i] [j - 1] = true; stack.push (новая позиция (i, j - 1)); J--; } else if ((temp [i - 1] [j] == 0) && (p [i - 1] [j] == false)) {p [i - 1] [j] = true; stack.push (новая позиция (i - 1, j)); я--; } else {Stack.pop (); if (stack.empty ()) {break; } i = stack.peek (). row; j = Stack.peek (). Col; }} Stack <fosive> newpos = new Stack <fosive> (); if (stack.empty ()) {break; } i = stack.peek (). row; j = Stack.peek (). Col; }} Stack <fosive> newpos = new Stack <fosive> (); if (stack.empty ()) {System.out.println ("Нет пути"); } else {System.out.println ("есть путь"); System.out.println («Путь выглядит следующим образом:»); while (! Stack.empty ()) {position pos = new Position (); pos = Stack.pop (); newpos.push (pos); }} / * * Графический выходной путь * * / String Result [] [] = New String [row+1] [col+1]; for (int k = 0; k <row; ++ k) {for (int t = 0; t <col; ++ t) {result [k] [t] = (maze [k] [t])+""; }} while (! newpos.empty ()) {position p1 = newpos.pop (); Результат [p1.row-1] [p1.col-1] = "#"; } for (int k = 0; k <row; ++ k) {for (int t = 0; t <col; ++ t) {System.out.print (restailt [k] [t]+"/t"); } System.out.println (); }} int maze [] []; private int row = 9; частный int col = 8; Stack <fose> Stack; Boolean P [] [] = null;} класс hello {public static void main (string [] args) {maze demo = new Maze (); demo.init (); demo.findpath (); }} Пример бега:
Пожалуйста, введите количество рядов лабиринта
3
Пожалуйста, введите количество столбцов в лабиринте
3
Пожалуйста, введите лабиринт из 3 рядов и 3 столбца
0 1 1
0 0 1
1 0 0
Пути следующие:
Пожалуйста, введите количество рядов лабиринта
9
Пожалуйста, введите количество столбцов в лабиринте
8
Пожалуйста, введите лабиринт из 9 рядов и 8 столбцов
0 0 1 0 0 0 1 0
0 0 1 0 0 0 1 0
0 0 1 0 1 1 0 1
0 1 1 1 0 0 1 0
0 0 0 1 0 0 0 0
0 1 0 0 0 1 0 1
0 1 1 1 1 0 0 1
1 1 0 0 0 1 0 1
1 1 0 0 0 0 0 0 0
Пути следующие:
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.