Dieser Artikel teilt die Java -Version des Maze -Algorithmus mit dem Stapel, der hauptsächlich die Verwendung des Stapels als Referenz untersucht. Der spezifische Inhalt ist wie folgt
Die Hauptideen sind wie folgt:
do {if (die aktuelle Position kann übergeben werden) {markieren Sie diese Position, die bestanden wurde; Speichern Sie die aktuelle Position und fusionieren Sie sie in den Stapel. if (die aktuelle Position ist der Endpunkt) {Programmende; } Holen Sie sich die nächste Position; } else {if (der Stapel ist nicht leer) {aus Stack; während (die aktuelle Positionsrichtung ist 4 und der Stapel nicht leer) {markieren Sie die aktuelle Position, die nicht bewegt werden kann; aus Stapel; } if (die Richtung der aktuellen Position ist weniger als 4) {Richtung +1; wieder in den Stapel eintreten; Holen Sie sich die nächste Position; }}}} while (der Stapel ist nicht leer);Der Java -Code lautet wie folgt:
Importieren Sie Java.util.stack; öffentliche Klasse Maze {// Stack Private Stack <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,0,1,0,0,0,1,1,1,1,1,1,1}, {1,0,1,1,0,0,0,0,1,1,1,1,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,0,1,1,1,1,1,1,1,0, 1,1,0,1,1,1,1,0, 1,1,0,1,0,1,1,0, 1,1,0,1,0,1,1,0, 1,1,0,1,0,1,1,0, 1,1,0,1,0,0,0,0, 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 jedoch jedoch jedoch jedoch jedoch jedoch dann dann dann. 1,1,1,1,1,0,1,0,0,0,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,0, 1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,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,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1 , 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1 , 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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,0,0,1,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0,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 statische endgültige int maze_size_x = 14; private statische endgültige Int Maze_size_y = 17; private statische endgültige int end_x = 12; private statische endgültige int end_y = 15; private void initmark () {für (int i = 0; i <maze_size_x; i ++) {für (int j = 0; j <maze_size_y; j ++) {mark [i] [j] = 0; }}} public void process () {initmark (); Positionscurpos = neue Position (1, 1); do {// Dieser Pfad kann verwendet werden, wenn (Maze [curpos.x] [curpos.y] == 0 && mark [curpos.x] [curpos.y] == 0) {mark [curpos.x] [curpos.y] = 1; stack.push (neuer Mazenode (Curpos, 1)); // Endpunkt if (curpos.x == end_x && curpos.y == end_y) {return; } curpos = NextPos (Curpos, stack.peek (). Richtung); } // NICHT in der Lage, sonst zu gehen {if (! Stack.isempty ()) {mazenode curnode = stack.pop (); while (curnode.direction == 4 &&! stack.iseMpty ()) {// Wenn alle 4 Richtungen der aktuellen Position versucht wurden, markieren Sie dann die Position, die nicht bewegt werden kann. Curnode = stack.pop (); } if (curnode.direction <4) {curnode.Direction ++; // Richtung +1 stack.push (curnode); // ressing curpos = nextpos (curnode.position, curnode.direction); // Erhalten Sie den nächsten Ort}}}}}} while, wob } public void DrawMaze () {für (int i = 0; i <mabyrinth.length; i ++) {for (int j = 0; j <maby [0] .Length; j ++) {System.out.print (Maze [i] [j]); } System.out.print ("/n"); } System.out.print ("/n"); } public void drawresult () {initmark (); Mazenode -Knoten; while (! stack.isempty ()) {node = stack.pop (); mark [node.position.x] [node.position.y] = 1; } für (int i = 0; i <mark.length; i ++) {für (int j = 0; j <mark [0] .Length; j ++) {System.out.print (mark [i] [j]); } System.out.print ("/n"); } System.out.print ("/n"); } // Die Position der Punkte in der Labyrinth -Klasse -Position aufzeichnen {int x; int y; öffentliche Position (int x, int y) {this.x = x; this.y = y; }} // Knoten in der Stapelklasse Mazenode {Positionsposition; int Richtung; public mazenode (Position pos) {this.position = pos; } public mazenode (Position pos, Int Dir) {this.position = pos; this.direction = dir; }} // Nächste Position, beginnend von der rechten, im Uhrzeigersinnigen öffentlichen Position NextPos (Positionsposition, int -Richtung) {Position newposition = new Position (Position.x, Position.Y); Switch (Richtung) {Fall 1: NewPosition.y += 1; brechen; Fall 2: NewPosition.x += 1; brechen; Fall 3: NewPosition.Y -= 1; brechen; Fall 4: NewPosition.x -= 1; brechen; Standard: Break; } return NewPosition; } public static void main (String [] args) {Maze Maze = New Maze (); Maze.Drawmaze (); Maze.Process (); Maze.Drawresult (); }}Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.