Cet article partage la version Java de l'algorithme du labyrinthe à l'aide de la pile, qui examine principalement l'utilisation de la pile pour votre référence. Le contenu spécifique est le suivant
Les principales idées sont les suivantes:
faire {if (la position actuelle peut être transmise) {Marquez cette position qui a passé; Enregistrez la position actuelle et fusionnez-la dans la pile; if (la position actuelle est le point final) {fin de programme; } Obtenez la position suivante; } else {if (la pile n'est pas vide) {hors de pile; tandis que (la direction de position actuelle est 4 et la pile n'est pas vide) {Marquez la position actuelle qui ne peut pas être déplacée; hors de pile; } if (la direction de la position actuelle est inférieure à 4) {Direction +1; rentrez dans la pile; Obtenez la position suivante; }}}} while (la pile n'est pas vide);Le code Java est le suivant:
import java.util.stack; public class kaze {// pile private stack <mazenode> stack = new Stack <Maze.maZenode> (); // labyrinthe privé int [] [] labyrinthe = {{1,1,1,1,1,1,1,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,0,1,1,1,1,1,1,1,1, {1,0,1,1,0,0,0,0,1,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,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,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,1,1,1,1, Final statique privé int Maze_size_x = 14; Final statique privé int Maze_size_y = 17; Final statique privé int fin_x = 12; Final statique privé int fin_y = 15; private void initmark () {for (int i = 0; i <kaze_size_x; i ++) {for (int j = 0; j <Maze_size_y; j ++) {mark [i] [j] = 0; }}} public void process () {initmark (); Position curpos = nouvelle position (1, 1); do {// Ce chemin peut être utilisé if (labyrinthe [curpos.x] [curpos.y] == 0 && mark [curpos.x] [curpos.y] == 0) {marc [curpos.x] [curpos.y] = 1; stack.push (new mazenode (Curpos, 1)); // Point final if (curpos.x == end_x && curpos.y == end_y) {return; } curpos = nextpos (curpos, pile.Peek (). Direction); } // incapable d'aller d'autre {if (! Stack.isempty ()) {mazenode curnode = stack.pop (); while (curnode.direction == 4 &&! stack.isempty ()) {// Si les 4 directions de la position actuelle ont été essayées, marquez la position qui ne peut pas être déplacée et marque [curnode.position.x] [curnode.position.y] = 1; curnode = stack.pop (); } if (curnode.direction <4) {curnode.direction ++; // Direction +1 Stack.push (curnode); // reentrepasser curpos = nextpos (curnode.position, curnode.direction); // obtenir l'emplacement suivant}}}} while (! stack.isempty ()); } public void drawMaze () {for (int i = 0; i <Maze.length; i ++) {for (int j = 0; j <kaze [0] .length; j ++) {System.out.print (kaze [i] [j]); } System.out.print ("/ n"); } System.out.print ("/ n"); } public void drawResult () {initmark (); Nœud mazenode; while (! stack.isempty ()) {node = stack.pop (); Mark [node.position.x] [node.position.y] = 1; } pour (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"); } // Enregistrez la position des points dans la position de classe du labyrinthe {int x; int y; position publique (int x, int y) {this.x = x; this.y = y; }} // nœud dans la classe de pile Mazenode {position de position; direction int; Mazenode public (position pos) {this.position = pos; } public Mazenode (position pos, int dir) {this.position = pos; this.direction = dir; }} // Position suivante, à partir de la position de droite, position publique NEXTPOS (position de position, direction int) {position newPosition = new Position (position.x, position.y); commutateur (direction) {cas 1: newPosition.y + = 1; casser; Cas 2: newPosition.x + = 1; casser; Cas 3: newPosition.y - = 1; casser; Cas 4: newPosition.x - = 1; casser; par défaut: pause; } return newPosition; } public static void main (String [] args) {Maze Maze = new Maze (); Maze.Drawmaze (); Maze.process (); Maze.Drawresult (); }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.