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

java 實(shí)現(xiàn)迷宮回溯算法示例詳解

 更新時(shí)間:2020年07月31日 09:53:57   作者:Lzfa  
這篇文章主要介紹了java 實(shí)現(xiàn)迷宮回溯算法示例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

用一個(gè)7 x 7的矩形表示迷宮,0和1分別表示的是通路和障礙。通過設(shè)計(jì)編寫程序找到藍(lán)色小球達(dá)到藍(lán)色旗子的路線

在這里插入圖片描述

思路:

構(gòu)建一個(gè)迷宮(用二維數(shù)組)實(shí)現(xiàn)找通路的方法findRoad()
構(gòu)建二維數(shù)組不難,我們主要是要實(shí)現(xiàn)findRoad()這個(gè)方法,在實(shí)現(xiàn)這個(gè)方法前,我們需要約定好一下幾個(gè)點(diǎn):小球的位置當(dāng)作入口(1,1),小旗的位置當(dāng)作出口(5,5)數(shù)組里數(shù)的含義分別為(0沒有走過)、(1障礙)、(2走過且為正確的路線)、(3走過且為錯(cuò)誤的路線)將我們每一步的走法稱為策略:下 -> 右 -> 上 ->左

實(shí)現(xiàn)

首先構(gòu)建出迷宮

public static void main(String[] args) {
  //1.創(chuàng)建二維數(shù)組模擬迷宮
  int[][] maze = new int[7][7];
  //2.初始化迷宮
  for (int i = 0; i < maze.length; i++) {
   //maze[i][j]:i控制行 j:控制列
   maze[0][i] = 1;//第1行都為1
   maze[6][i] = 1;//最后一行都為1
   maze[i][0] = 1;//第一列都為1
   maze[i][6] = 1;//最后一列都為1
   //其他位置的1
   maze[4][1] = 1;
   maze[4][2] = 1;
   maze[4][3] = 1;
   maze[4][4] = 1;
   maze[3][4] = 1;
   maze[2][3] = 1;
  }
  //打印迷宮
  System.out.println("完成迷宮初始化:");
  for (int i = 0; i < maze.length; i++) {
   for (int j = 0; j < maze[i].length; j++) {
    System.out.print(maze[i][j] + " ");
   }
   System.out.println();
  }
 }

然后寫findRoad()方法

  * 使用遞歸回溯找通路 (5,5為出口)
  * @param maze 迷宮
  * @param i 從哪個(gè)位置開始找
  * @param j 從哪個(gè)位置開始找
  * @return 找到通路返回true 否則false
  */
 public static boolean findRoad(int[][] maze, int i, int j) {
  //策略:下 -> 右 -> 上 ->左
  //0:沒有走過 1:障礙 2:走過且為正確的路線 3:走過且為錯(cuò)誤的路線
  if (maze[5][5] == 2) {//找到通路
   return true;
  } else {
   if (maze[i][j] == 0) {
    //當(dāng)前點(diǎn)沒走過,按策略走
    maze[i][j] = 2;//當(dāng)前點(diǎn)改為2,假定能走通
    if (findRoad(maze, i + 1, j)) {//向下走
     return true;
    } else if (findRoad(maze, i, j + 1)) {//向右走
     return true;
    } else if (findRoad(maze, i - 1, j)) {//向上走
     return true;
    } else if (findRoad(maze, i, j - 1)) {//向左走
     return true;
    } else {
     //該點(diǎn)無法走通
     maze[i][j] = 3;
     return false;//返回到上個(gè)方法(即返回到上個(gè)點(diǎn))
    }
   } else {
    //該點(diǎn)為 1或2或3,無法走通,直接返回上個(gè)方法(即上個(gè)點(diǎn))
    return false;
   }
  }
 }

main方法調(diào)用findRoad()方法,傳入創(chuàng)建好的迷宮,和入口點(diǎn)(1,1)

//mian方法中調(diào)用findRoad()方法
  findRoad(maze,1,1);
  //打印迷宮
  System.out.println("完成路線的迷宮:");
  for (int i = 0; i < maze.length; i++) {
   for (int j = 0; j < maze[i].length; j++) {
    System.out.print(maze[i][j] + " ");
   }
   System.out.println();
  }

效果

在這里插入圖片描述

到此這篇關(guān)于java 實(shí)現(xiàn)迷宮回溯算法示例詳解的文章就介紹到這了,更多相關(guān)java 實(shí)現(xiàn)迷宮回溯算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用springboot整合RateLimiter限流過程

    使用springboot整合RateLimiter限流過程

    這篇文章主要介紹了使用springboot整合RateLimiter限流過程,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • spring boot啟動(dòng)加載數(shù)據(jù)原理分析

    spring boot啟動(dòng)加載數(shù)據(jù)原理分析

    實(shí)際應(yīng)用中,我們會有在項(xiàng)目服務(wù)啟動(dòng)的時(shí)候就去加載一些數(shù)據(jù)或做一些事情這樣的需求。這時(shí)spring Boot 為我們提供了一個(gè)方法,通過實(shí)現(xiàn)接口 CommandLineRunner 來實(shí)現(xiàn)。下面給大家詳細(xì)介紹下,需要的的朋友參考下吧
    2017-04-04
  • SpringCloud Gateway的路由,過濾器和限流解讀

    SpringCloud Gateway的路由,過濾器和限流解讀

    這篇文章主要介紹了SpringCloud Gateway的路由,過濾器和限流解讀,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java實(shí)現(xiàn)連連看算法

    Java實(shí)現(xiàn)連連看算法

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)連連看算法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Struts 2 實(shí)現(xiàn)Action的幾種方式

    Struts 2 實(shí)現(xiàn)Action的幾種方式

    本篇文章主要介紹了Struts 2 實(shí)現(xiàn)Action的幾種方式,Struts 2框架下實(shí)現(xiàn)Action類有三種方式,有興趣的可以了解一下
    2017-10-10
  • Java實(shí)現(xiàn)AES加密和解密方式完整示例

    Java實(shí)現(xiàn)AES加密和解密方式完整示例

    這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)AES加密和解密方式的相關(guān)資料,AES加密為最常見的對稱加密算法,是一種區(qū)塊加密標(biāo)準(zhǔn),這個(gè)標(biāo)準(zhǔn)用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用,需要的朋友可以參考下
    2023-10-10
  • Mybatis Trim標(biāo)簽用法簡單介紹

    Mybatis Trim標(biāo)簽用法簡單介紹

    這篇文章主要介紹了Mybatis Trim標(biāo)簽用法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2017-05-05
  • Java傳引用問題舉例詳解

    Java傳引用問題舉例詳解

    引用傳遞是Java中一個(gè)重要的概念,它與值傳遞不同,可以使得函數(shù)或方法可以修改傳入的對象,這篇文章主要給大家介紹了關(guān)于Java傳引用問題的相關(guān)資料,需要的朋友可以參考下
    2024-07-07
  • 詳解Spring Data JPA動(dòng)態(tài)條件查詢的寫法

    詳解Spring Data JPA動(dòng)態(tài)條件查詢的寫法

    本篇文章主要介紹了Spring Data JPA動(dòng)態(tài)條件查詢的寫法 ,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06
  • Spring計(jì)時(shí)器stopwatch使用詳解

    Spring計(jì)時(shí)器stopwatch使用詳解

    這篇文章主要介紹了Spring計(jì)時(shí)器stopwatch使用詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論