国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

使用棧的迷宮算法java版代碼

2024-07-13 10:17:06
字體:
供稿:網(wǎng)友

本文為大家分享了使用棧的迷宮算法java版,主要考察棧的使用,供大家參考,具體內(nèi)容如下

主要思路如下:

 do {  if(當前位置可通過) {    標記此位置已走過;    保存當前位置并入棧;    if(當前位置為終點) {      程序結(jié)束;    }    獲取下一個位置;  }  else {    if(棧非空) {      出棧;      while(當前位置方向為4且棧非空) {        標記當前位置不可走;        出棧;      }      if(當前位置的方向小于4) {        方向+1;        重新入棧;        獲取下一個位置;      }    }  }}while (棧非空);

java代碼如下:

import java.util.Stack;public class Maze {  // 棧  private Stack<MazeNode> stack = new Stack<Maze.MazeNode>();  // 迷宮  private int[][] maze = {    {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,0,0,0,1,1,1,1,1,1},    {1,0,0,0,0,1,1,0,1,1,1,0,0,1,1,1,1},    {1,0,1,1,0,0,0,0,1,1,1,1,0,0,1,1,1},    {1,1,1,0,0,1,1,1,1,1,1,0,1,1,0,0,1},    {1,1,0,0,1,0,0,1,0,1,1,1,1,1,1,1,1},    {1,0,0,1,1,1,1,1,1,0,1,0,0,1,0,1,1},    {1,0,0,1,1,1,1,1,1,0,1,0,0,1,0,1,1},    {1,0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1},    {1,0,0,1,1,0,1,1,0,1,1,1,1,1,0,1,1},    {1,1,0,0,0,0,1,1,0,1,0,0,0,0,0,0,1},    {1,1,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1},    {1,0,0,0,0,1,1,1,1,1,0,1,1,1,1,0,1},    {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},  };  // 標記路徑是否已走過  private int[][] mark = new int[MAZE_SIZE_X][MAZE_SIZE_Y];  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();    Position curPos = new Position(1, 1);    do {      // 此路徑可走      if (maze[curPos.x][curPos.y] == 0 && mark[curPos.x][curPos.y] == 0) {        mark[curPos.x][curPos.y] = 1;        stack.push(new MazeNode(curPos, 1));        // 已到終點        if (curPos.x == END_X && curPos.y == END_Y) {          return;        }        curPos = nextPos(curPos, stack.peek().direction);      }      // 走不通      else {        if (!stack.isEmpty()) {          MazeNode curNode = stack.pop();          while (curNode.direction == 4 && !stack.isEmpty()) {            // 如果當前位置的4個方向都已試過,那么標記該位置不可走,并出棧            mark[curNode.position.x][curNode.position.y] = 1;            curNode = stack.pop();          }          if (curNode.direction < 4) {            curNode.direction++;// 方向+1            stack.push(curNode);// 重新入棧            curPos = nextPos(curNode.position, curNode.direction);// 獲取下一個位置          }        }      }    }    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();    MazeNode node;    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");  }  // 記錄迷宮中的點的位置  class Position {    int x;    int y;    public Position(int x, int y) {      this.x = x;      this.y = y;    }  }  // 棧中的結(jié)點  class MazeNode {    Position position;    int direction;    public MazeNode(Position pos) {      this.position = pos;    }    public MazeNode(Position pos, int dir) {      this.position = pos;      this.direction = dir;    }  }  // 下一個位置,從右開始,順時針  public Position nextPos(Position position, int direction) {    Position newPosition = new Position(position.x, position.y);    switch (direction) {    case 1:      newPosition.y += 1;      break;    case 2:      newPosition.x += 1;      break;    case 3:      newPosition.y -= 1;      break;    case 4:      newPosition.x -= 1;      break;    default:      break;    }    return newPosition;  }  public static void main(String[] args) {    Maze maze = new Maze();    maze.drawMaze();    maze.process();    maze.drawResult();  }}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 华亭县| 开阳县| 和静县| 治多县| 朝阳市| 庆安县| 搜索| 普洱| 闽清县| 喀什市| 成安县| 民丰县| 松江区| 安丘市| 大邑县| 城步| 佳木斯市| 明光市| 全椒县| 革吉县| 教育| 东阳市| 永宁县| 荣成市| 利津县| 蓝田县| 泽州县| 永寿县| 澄城县| 宜兰县| 繁峙县| 二连浩特市| 武宣县| 沾益县| 甘孜| 汤原县| 隆子县| 尤溪县| 临沂市| 临清市| 万源市|