欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

主要思路如下:

 do {
 if(當(dāng)前位置可通過) {
  標(biāo)記此位置已走過;
  保存當(dāng)前位置并入棧;
  if(當(dāng)前位置為終點) {
   程序結(jié)束;
  }
  獲取下一個位置;
 }
 else {
  if(棧非空) {
   出棧;
   while(當(dāng)前位置方向為4且棧非空) {
    標(biāo)記當(dāng)前位置不可走;
    出棧;
   }
   if(當(dāng)前位置的方向小于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},
 };
 // 標(biāo)記路徑是否已走過
 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()) {
      // 如果當(dāng)前位置的4個方向都已試過,那么標(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);// 獲取下一個位置
     }
    }
   }
  }
  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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java接口使用默認(rèn)方法的講解

    java接口使用默認(rèn)方法的講解

    在本篇文章里小編給大家整理了一篇關(guān)于java接口使用默認(rèn)方法的講解內(nèi)容,有需要的朋友們可以學(xué)習(xí)下。
    2021-04-04
  • SpringSecurity構(gòu)建基于JWT的登錄認(rèn)證實現(xiàn)

    SpringSecurity構(gòu)建基于JWT的登錄認(rèn)證實現(xiàn)

    這篇文章主要介紹了SpringSecurity構(gòu)建基于JWT的登錄認(rèn)證實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • SpringBoot應(yīng)用快速部署到K8S的詳細(xì)教程

    SpringBoot應(yīng)用快速部署到K8S的詳細(xì)教程

    這篇文章主要介紹了SpringBoot應(yīng)用快速部署到K8S的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • SpringMVC實現(xiàn)前端后臺交互傳遞數(shù)據(jù)

    SpringMVC實現(xiàn)前端后臺交互傳遞數(shù)據(jù)

    本篇文章主要介紹了SpringMVC實現(xiàn)前端后臺傳遞數(shù)據(jù)的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • maven如何利用springboot的配置文件進行多個環(huán)境的打包

    maven如何利用springboot的配置文件進行多個環(huán)境的打包

    這篇文章主要介紹了maven如何利用springboot的配置文件進行多個環(huán)境的打包,在Spring Boot中多環(huán)境配置文件名需要滿足application-{profiles.active}.properties的格式,其中{profiles.active}對應(yīng)你的環(huán)境標(biāo)識,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2023-02-02
  • 使用Java和高德地圖API將經(jīng)緯度轉(zhuǎn)換為地理位置信息的步驟

    使用Java和高德地圖API將經(jīng)緯度轉(zhuǎn)換為地理位置信息的步驟

    這篇文章詳細(xì)介紹了如何將GPS坐標(biāo)轉(zhuǎn)換為人類可讀的地理位置,介紹了環(huán)境準(zhǔn)備、代碼實現(xiàn)、異常處理及優(yōu)化步驟,首先創(chuàng)建LocationFinder類,實現(xiàn)getLocationFromCoordinates方法,利用高德逆地理編碼API轉(zhuǎn)換坐標(biāo),文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • java實現(xiàn)上傳網(wǎng)絡(luò)圖片到微信臨時素材

    java實現(xiàn)上傳網(wǎng)絡(luò)圖片到微信臨時素材

    這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)上傳網(wǎng)絡(luò)圖片到微信臨時素材,網(wǎng)絡(luò)圖片上傳到微信服務(wù)器,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Springboot mybatis常見配置問題解決

    Springboot mybatis常見配置問題解決

    這篇文章主要介紹了Springboot mybatis常見配置問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • 使用@Value注入map、List,yaml格式方式

    使用@Value注入map、List,yaml格式方式

    這篇文章主要介紹了使用@Value注入map、List,yaml格式方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • 淺談@Value和@Bean的執(zhí)行順序問題

    淺談@Value和@Bean的執(zhí)行順序問題

    這篇文章主要介紹了@Value和@Bean的執(zhí)行順序問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06

最新評論