Artikel ini berbagi versi Java dari algoritma Maze menggunakan tumpukan, yang terutama memeriksa penggunaan tumpukan untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
Ide utamanya adalah sebagai berikut:
lakukan {if (posisi saat ini dapat dilewati) {tandai posisi ini yang telah berlalu; Simpan posisi saat ini dan gabungkan ke dalam tumpukan; if (posisi saat ini adalah titik akhir) {program akhir; } Dapatkan posisi berikutnya; } else {if (stack tidak kosong) {out of stack; sementara (arah posisi saat ini adalah 4 dan tumpukan tidak kosong) {Tandai posisi saat ini yang tidak dapat dipindahkan; keluar dari tumpukan; } if (arah posisi saat ini kurang dari 4) {arah +1; masukkan kembali tumpukan; Dapatkan posisi berikutnya; }}}} while (tumpukan tidak kosong);Kode Java adalah sebagai berikut:
Impor java.util.stack; kelas publik maze {// stack private stack <mazenode> stack = stack baru <maze.mazenode> (); // labirin private int [] [] maze = {{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,0,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,0,1,1,0,0,0,0,1,1,1,1,1,0,0,1,1,1,1,1,0,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,0,1,1, 1,1,1,1,1,1,1,1,1,0,1,1,0,1,1,1,1,1,1,1,1,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,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,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,1,1,0,0,0,0,0,1}, {1,1,0,1,1,1,1,1,1,1,1,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 , 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,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 static final int maze_size_y = 17; private static final int end_x = 12; private static 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 (); Posisi Curpos = Posisi Baru (1, 1); do {// jalur ini dapat digunakan if (labirin [curpos.x] [curpos.y] == 0 && tanda [curpos.x] [curpos.y] == 0) {mark [curpos.x] [curpos.y] = 1; stack.push (mazenode baru (curpos, 1)); // titik akhir if (curpos.x == end_x && curpos.y == end_y) {return; } curpos = nextPos (curpos, stack.peek (). Direction); } // tidak dapat pergi ke lain {if (! Stack.isempty ()) {mazenode curnode = stack.pop (); while (curnode.direction == 4 &&! stack.isempty ()) {// Jika semua 4 arah posisi saat ini telah dicoba, maka tandai posisi yang tidak dapat dipindahkan dan tandai [curnode.position.x] [curnode.position.y] = 1; curnode = stack.pop (); } if (curnode.direction <4) {curnode.direction ++; // arah +1 stack.push (curnode); // masukkan kembali curpos = nextpos (curnode.position, curnode.direction); // dapatkan lokasi berikutnya}}}} while (! Stack.); } 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 (); Node Mazenode; while (! stack.isempty ()) {node = stack.pop (); tandai [node.position.x] [node.position.y] = 1; } untuk (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"); } // Rekam posisi titik di posisi kelas labirin {int x; int y; posisi publik (int x, int y) {this.x = x; this.y = y; }} // node di stack class mazenode {posisi posisi; arah int; mazenode publik (posisi pos) {this.position = pos; } mazenode publik (posisi pos, int dir) {this.position = pos; this.direction = dir; }} // posisi berikutnya, mulai dari kanan, posisi publik searah nextPos (posisi posisi, arah int) {position newPosition = posisi baru (position.x, position.y); switch (arah) {case 1: newPosition.y += 1; merusak; Kasus 2: newPosition.x += 1; merusak; Kasus 3: newPosition.y -= 1; merusak; Kasus 4: newPosition.x -= 1; merusak; default: break; } return newPosition; } public static void main (string [] args) {maze maze = new maze (); maze.drawmaze (); maze.process (); maze.drawresult (); }}Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.