Este artículo comparte la versión Java del algoritmo de laberinto utilizando la pila, que examina principalmente el uso de la pila para su referencia. El contenido específico es el siguiente
Las ideas principales son las siguientes:
do {if (la posición actual se puede pasar) {marque esta posición que ha pasado; Guardar la posición actual y fusionarla en la pila; if (la posición actual es el punto final) {en final del programa; } Obtenga la siguiente posición; } else {if (la pila no está vacía) {fuera de la pila; mientras que (la dirección de posición actual es 4 y la pila no está vacía) {Marque la posición actual que no se puede mover; fuera de pila; } if (la dirección de la posición actual es inferior a 4) {dirección +1; volver a entrar en la pila; Obtenga la siguiente posición; }}}} while (la pila no está vacía);El código Java es el siguiente:
import java.util.stack; Maze de clase pública {// pila de pila <mazenode> stack = new 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,1,1}, {1,0,1,0,0,1,1,1,1,1,1,1}, {1,0,1,1,0,0,0,0,0,1,1,1,1,1,0,0,1,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,1,1,0,1,0, 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, 0,0,1,0,1,1,1,1,1,1,1,1,0,0,0,1,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,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,11 , 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 , 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 , 1,1,1,1,1,1,1,1,1,1,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,1,0,1,1,1,0,0,0,0,0,0,0,1,1,0,1,0,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; Private estático final int Maze_size_y = 17; Private estático final int end_x = 12; Private estático final 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 (); Posición curpos = nueva posición (1, 1); do {// Esta ruta se puede usar si (Maze [curpos.x] [curpos.y] == 0 && mark [curpos.x] [curpos.y] == 0) {mark [curpos.x] [curpos.y] = 1; stack.push (nuevo Mazenode (curpos, 1)); // Punto final if (curpos.x == end_x && curpos.y == end_y) {return; } curpos = nextpos (curpos, stack.peek (). dirección); } // no puede ir otra {if (! Stack.isEmpty ()) {mazenode curnode = stack.pop (); while (curnode.direction == 4 &&! stack.isempty ()) {// Si se han probado las 4 direcciones de la posición actual, entonces marque la posición que no se puede mover y marque [curnode.position.x] [curnode.position.y] = 1; curnode = stack.pop (); } if (curnode.direction <4) {curnode.direction ++; // dirección +1 stack.push (curnode); // reentrar curpos = nextpos (curnode.position, curnode.direction); // Obtenga la siguiente ubicación}}}} while (! stack.isempty ()); } public void DrawMaze () {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 (); Nodo Mazenode; 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"); } // Registre la posición de los puntos en la posición de la clase de laberinto {int x; int y; posición pública (int x, int y) {this.x = x; this.y = y; }} // nodo en la clase de pila mazenode {posición posición; int dirección; public Mazenode (posición pos) {this.position = pos; } public Mazenode (posición pos, int dir) {this.position = pos; this.Direction = dir; }} // Siguiente posición, comenzando desde la derecha, posición pública en sentido horario NEXTPOS (posición de posición, int dirección) {posición newPosition = new Position (posicion.x, posicion.y); switch (dirección) {caso 1: newPosition.y += 1; romper; Caso 2: NewPosition.x += 1; romper; Caso 3: NewPosition.y -= 1; romper; Caso 4: NewPosition.x -= 1; romper; predeterminado: ruptura; } return NewPosition; } public static void main (string [] args) {Maze Maze = new Maze (); Maze.DrawMaze (); Maze.process (); Maze.DrawResult (); }}Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.