Este artigo compartilha a versão Java do algoritmo Maze usando a pilha, que examina principalmente o uso da pilha para sua referência. O conteúdo específico é o seguinte
As principais idéias são as seguintes:
faça {if (a posição atual pode ser passada) {marque esta posição que passou; salve a posição atual e mescla -a na pilha; if (a posição atual é o ponto final) {END END; } Obtenha a próxima posição; } else {if (a pilha não está vazia) {fora da pilha; enquanto (a direção da posição atual é 4 e a pilha não está vazia) {marque a posição atual que não pode ser movida; fora da pilha; } if (a direção da posição atual é menor que 4) {direção +1; Entre a pilha; Obtenha a próxima posição; }}}} while (a pilha não está vazia);O código Java é o seguinte:
importar java.util.stack; public class Maze {// Stack STACK STACK <MAZENODE> pilha = 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,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,0,1,1,0,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,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 estático 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 (); Curpas de posição = nova posição (1, 1); do {// este caminho pode ser usado se (maze [curpos.x] [curpas.y] == 0 && mark [curpos.x] [curpos.y] == 0) {mark [curpas.x] [curpos.y] = 1; Stack.push (novo Mazenode (Curpos, 1)); // ponto final if (curpos.x == end_x && curpos.y == end_y) {return; } curpas = nextPos (Curpos, Stack.peek (). Direction); } // não é capaz de ir mais {if (! Stack.isempty ()) {mazenode Curnode = stack.pop (); while (Curnode.direction == 4 &&! Stack.isEmpty ()) {// Se todas as 4 direções da posição atual tiverem sido julgadas, marque a posição que não pode ser movida e marque [Curnode.Position.x] [Curnode.Position.Y] = 1; Curnode = Stack.pop (); } if (Curnode.Direction <4) {Curnode.Direction ++; // Direction +1 Stack.push (Curnode); // reenture curpas = nextpos (Curnode.Position, Curnode.Direction); // obtenha o próximo local}}}} (! } 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 dAwResult () {initmark (); Nó Mazenode; while (! Stack.isEmpty ()) {node = Stack.pop (); Mark [node.position.x] [node.position.y] = 1; } para (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 a posição dos pontos na posição da classe Maze {int x; int y; Posição pública (int x, int y) {this.x = x; this.y = y; }} // nó na classe de pilha Mazenode {posição de posição; Int Direction; public Mazenode (posição pos) {this.Position = POS; } public mazenode (posicionar pos, int dir) {this.position = pos; this.direction = dir; }} // Próxima posição, começando na posição pública direita e no sentido horário NextPos (posição de posição, int orientação) {posicionamento newPosition = nova posição (position.x, position.y); switch (direção) {case 1: newPosition.y += 1; quebrar; Caso 2: newPosition.x += 1; quebrar; Caso 3: newPosition.y -= 1; quebrar; Caso 4: newPosition.x -= 1; quebrar; Padrão: quebra; } retornar newPosition; } public static void main (string [] args) {Maze Maze = new Maze (); MAZE.DRAWMAZE (); Maze.process (); Maze.DrawResult (); }}O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.