最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年05月27日 09:30:25   作者:young_leez  
這篇文章主要為大家詳細(xì)介紹了使用棧的迷宮算法java版代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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

主要思路如下:

 do {
 if(當(dāng)前位置可通過(guò)) {
  標(biāo)記此位置已走過(guò);
  保存當(dāng)前位置并入棧;
  if(當(dāng)前位置為終點(diǎn)) {
   程序結(jié)束;
  }
  獲取下一個(gè)位置;
 }
 else {
  if(棧非空) {
   出棧;
   while(當(dāng)前位置方向?yàn)?且棧非空) {
    標(biāo)記當(dāng)前位置不可走;
    出棧;
   }
   if(當(dāng)前位置的方向小于4) {
    方向+1;
    重新入棧;
    獲取下一個(gè)位置;
   }
  }
 }
}
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},
 };
 // 標(biāo)記路徑是否已走過(guò)
 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));
    // 已到終點(diǎn)
    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()) {
      // 如果當(dāng)前位置的4個(gè)方向都已試過(guò),那么標(biāo)記該位置不可走,并出棧
      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);// 獲取下一個(gè)位置
     }
    }
   }
  }
  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");
 }

 // 記錄迷宮中的點(diǎn)的位置
 class Position {
  int x;
  int y;

  public Position(int x, int y) {
   this.x = x;
   this.y = y;
  }
 }

 // 棧中的結(jié)點(diǎn)
 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;
  }
 }

 // 下一個(gè)位置,從右開(kāi)始,順時(shí)針
 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();
 }

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Springboot集成ProtoBuf的實(shí)例

    Springboot集成ProtoBuf的實(shí)例

    這篇文章主要介紹了Springboot集成ProtoBuf的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java HttpClient傳輸json格式的參數(shù)實(shí)例講解

    java HttpClient傳輸json格式的參數(shù)實(shí)例講解

    這篇文章主要介紹了java HttpClient傳輸json格式的參數(shù)實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Zookeeper的選舉機(jī)制詳解

    Zookeeper的選舉機(jī)制詳解

    Zookeeper的選舉機(jī)制是基于ZAB協(xié)議的Paxos變種,通過(guò)LOOKING、PROPOSAL、ACCEPT和COMMIT四個(gè)階段,確保集群中只有一個(gè)領(lǐng)導(dǎo)節(jié)點(diǎn),選舉過(guò)程中,服務(wù)器通過(guò)投票和收集投票信息,確定ZXID和SID來(lái)選擇領(lǐng)導(dǎo)者,FastLeaderElection算法優(yōu)化了選舉過(guò)程,提高選舉效率
    2025-02-02
  • SpringBoot中RabbitMQ集群的搭建詳解

    SpringBoot中RabbitMQ集群的搭建詳解

    單個(gè)的?RabbitMQ?肯定無(wú)法實(shí)現(xiàn)高可用,要想高可用,還得上集群。這篇文章主要介紹了SpringBoot中RabbitMQ集群的兩種模式的搭建:普通集群搭建和鏡像集群搭建,需要的朋友可以參考一下
    2021-12-12
  • java集合迭代器Iterator中的remove陷阱

    java集合迭代器Iterator中的remove陷阱

    這篇文章主要介紹了java集合迭代器Iterator中的remove陷阱,需要的朋友可以參考下
    2016-04-04
  • Java中的訪問(wèn)修飾符詳細(xì)解析

    Java中的訪問(wèn)修飾符詳細(xì)解析

    以下是對(duì)Java中的訪問(wèn)修飾符進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-09-09
  • SpringBoot中GlobalExceptionHandler異常處理機(jī)制詳細(xì)說(shuō)明

    SpringBoot中GlobalExceptionHandler異常處理機(jī)制詳細(xì)說(shuō)明

    Spring Boot的GlobalExceptionHandler是一個(gè)全局異常處理器,用于捕獲和處理應(yīng)用程序中發(fā)生的所有異常,這篇文章主要給大家介紹了關(guān)于Java中GlobalExceptionHandler異常處理機(jī)制的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • Java 線程的優(yōu)先級(jí)(setPriority)案例詳解

    Java 線程的優(yōu)先級(jí)(setPriority)案例詳解

    這篇文章主要介紹了Java 線程的優(yōu)先級(jí)(setPriority)案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • Spring Boot 中的Servlet簡(jiǎn)單使用

    Spring Boot 中的Servlet簡(jiǎn)單使用

    在spring boot中添加自己的Servlet有兩種方法,代碼注冊(cè)Servlet和注解自動(dòng)注冊(cè)(Filter和Listener也是如此)。這篇文章主要介紹了Spring Boot 中的Servlet簡(jiǎn)單使用,需要的朋友可以參考下
    2017-04-04
  • Spring boot 路徑映射的實(shí)現(xiàn)

    Spring boot 路徑映射的實(shí)現(xiàn)

    這篇文章主要介紹了spring boot 路徑映射的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論

滨州市| 洮南市| 栖霞市| 化德县| 青浦区| 策勒县| 秦皇岛市| 滨海县| 德阳市| 铜川市| 香河县| 壤塘县| 电白县| 宁安市| 沙湾县| 宁乡县| 怀安县| 玉龙| 萨迦县| 柳林县| 龙川县| 临海市| 庆城县| 静海县| 宣武区| 龙口市| 泸西县| 馆陶县| 安化县| 吉隆县| 景东| 阜康市| 蓬莱市| 江陵县| 永安市| 横山县| 曲周县| 克什克腾旗| 大厂| 繁昌县| 临邑县|