В этой статье разделяет Java -версия алгоритма лабиринта с использованием стека, в основном, в основном рассматривается использование стека для вашей ссылки. Конкретный контент заключается в следующем
Основные идеи заключаются в следующем:
do {if (текущая позиция может быть передана) {отметьте эту позицию, которая прошла; Сохраните текущую позицию и объедините ее в стек; if (текущая позиция - конечная точка) {end программы; } Получить следующую позицию; } else {if (стек не пуст) {out из стека; В то время как (текущее направление положения равно 4, а стек не пуст) {отметьте текущую позицию, которая не может быть перемещена; вне стека; } if (направление текущей позиции меньше 4) {направление +1; повторно введите стек; Получить следующую позицию; }}}} while (стек не пуст);Код Java выглядит следующим образом:
Import java.util.stack; открытый класс Maze {// Stack Private Stack <mazenode> Stack = новый стек <maze.mazenode> (); // MAZE Private int [] [] maze = {{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}, {1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, {1,0,1,1,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,0, 1,1,1,1,1,0,1,0,1,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,0, 1,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1,1,0,0,1,0,1,1,1,1,1,1,1, 0,0,1,0,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1, 1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 , 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 , 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 , 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 {1,0,0,1,1,0,1,1,0,1,1,1,1,1,1,1,1,1,0,1,1,1,0,0,0,0,0,0,1,0,1,0,0,0,0,0,1}, {1,1,0,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 ,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, Private Static Final int maze_size_x = 14; Приватный статический финал int maze_size_y = 17; Частный статический конечный int end_x = 12; Частный статический конечный int end_y = 15; private void initmark () {for (int i = 0; i <maze_size_x; i ++) {for (int j = 0; j <maze_size_y; j ++) {mark [i] [j] = 0; }}} public void Process () {initmark (); Положение curpos = новая позиция (1, 1); do {// этот путь можно использовать, если (maze [curpos.x] [curpos.y] == 0 && mark [curpos.x] [curpos.y] == 0) {mark [curpos.x] [curpos.y] = 1; stack.push (new mazenode (curpos, 1)); // конечная точка if (curpos.x == end_x && curpos.y == end_y) {return; } curpos = nextpos (curpos, stack.peek (). Direction); } // не в состоянии пойти и еще {if (! Stack.isempty ()) {mazenode curnode = stack.pop (); while (curnode.direction == 4 &&! Stack.isempty ()) {// Если были опробованы все 4 направления текущей позиции, то отметьте позицию, которая не может быть перемещена, и отметьте [curnode.position.x] [curnode.position.y] = 1; curnode = Stack.pop (); } if (curnode.direction <4) {curnode.virection ++; // Направление +1 Stack.push (curnode); // повторное внедрение curpos = nextpos (curnode.position, curnode.direction); // Получить следующее место}}}} while (! Stack.isempty ()); } public void draitmaze () {for (int i = 0; i <maze.length; i ++) {for (int j = 0; j <maze [0] .length; j ++) {System.out.print (maze [i] [j]); } System.out.print ("/n"); } System.out.print ("/n"); } public void drawResult () {initmark (); Мазенод узел; while (! Stack.isempty ()) {node = Stack.pop (); mark [node.position.x] [node.position.y] = 1; } for (int i = 0; i <mark.length; i ++) {for (int j = 0; j <mark [0] .length; j ++) {System.out.print (mark [i] [j]); } System.out.print ("/n"); } System.out.print ("/n"); } // Записать положение точек в позиции класса лабиринта {int x; int y; публичная позиция (int x, int y) {this.x = x; this.y = y; }} // Узел в классе стека Mazenode {позиция; int direction; public mazenode (position pos) {this.position = pos; } public mazenode (position pos, int dir) {this.position = pos; this.direction = dir; }} // Следующая позиция, начиная с правой, публичная позиция по часовой стрелке NextPos (позиция позиции, int direction) {position newposition = new Position (position.x, position.y); Switch (Direction) {case 1: newposition.y += 1; перерыв; Случай 2: newposition.x += 1; перерыв; Случай 3: newposition.y -= 1; перерыв; Случай 4: newposition.x -= 1; перерыв; по умолчанию: перерыв; } вернуть Newposition; } public static void main (string [] args) {maze maze = new Maze (); Maze.drawmaze (); Maze.process (); Maze.DrawResult (); }}Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.