日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

搜索算法(一)--DFS/BFS求解拯救同伴问题(JAVA)

發布時間:2025/3/15 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 搜索算法(一)--DFS/BFS求解拯救同伴问题(JAVA) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

拯救同伴問題

問題描述:假設有如下迷宮,求解從某一點出發到目標位置的最短距離

Input:
5 4
0 0 1 0
0 0 0 0
0 0 1 0
0 1 0 0
0 0 0 1
1 1 4 3

Output:
7


深度優先搜索(DFS)

import java.util.Scanner;public class DFS {static int[][] a = new int[51][51];static int[][] book = new int[51][51];static int n, m, p, q, min = 99999999;static int sum = 1;public static void main(String[] args) {Scanner input = new Scanner(System.in);n = input.nextInt();m = input.nextInt();for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {a[i][j] = input.nextInt();}}int startX = input.nextInt();int startY = input.nextInt();p = input.nextInt();q = input.nextInt();book[startX][startY] = 1;dfs(startX,startY,0);System.out.println(min);}public static void dfs(int x, int y, int step) {/*** 按照右,下,左,上的順時針順序遍歷* 定義一個方向數組,便于操作* */int[][] next = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};int tx, ty;/*** 是否到達目標位置,更新最小值* */if (x == p && y == q) {min = min < step ? min : step;return;}/*** 計算下個點的坐標* */for (int i = 0; i < 4; i++) {tx = x + next[i][0];ty = y + next[i][1];/*** 檢查臨界* */if (tx < 1 || tx > n || ty < 1 || ty > m) {continue;}/*** 不是障礙物,也未加入路徑中,則執行dfs,注意回溯* */if (a[tx][ty] == 0 && book[tx][ty] == 0) {book[tx][ty] = 1;dfs(tx, ty, step + 1);/*** 為了找到最短的路徑必須進行回溯* */book[tx][ty] = 0;}}} }

同樣的廣度優先搜索(BFS)也可以接這個題目,但是要注意廣度優先搜索需要有一個隊列Queue來控制。這里需要創建一個Point類來保存坐標和距離。
另外,由于java本身沒有提供隊列獲取隊尾元素的api,所以在下面的算法中需要注意處理,方法不唯一。

廣度優先搜索(BFS)

import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;class Point{public int x;public int y;public int s;Point(int x, int y, int s) {this.x = x;this.y = y;this.s = s;} }public class BFS {static int[][] a = new int[51][51];static int[][] book = new int[51][51];static Queue<Point> queue = new LinkedList<>();static int n, m, p, q;static int min = 99999999;public static void main(String[] args) {Scanner input = new Scanner(System.in);n = input.nextInt();m = input.nextInt();for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {a[i][j] = input.nextInt();}}int startX = input.nextInt();int startY = input.nextInt();p = input.nextInt();q = input.nextInt();queue.add(new Point(startX, startY, 0));book[startX][startY] = 1;bfs();System.out.println(min);}public static void bfs() {/*** 按照右,下,左,上的順時針順序遍歷* 定義一個方向數組,便于操作* */int[][] next = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};int tx, ty;int flag = 0;while (!queue.isEmpty()) {for (int i = 0; i < 4; i++) {tx = queue.peek().x + next[i][0];ty = queue.peek().y + next[i][1];/*** 臨界條件* */if (tx < 1 || tx > n || ty < 1 || ty > m) {continue;}/*** 非障礙物,未標記為1,則進行入隊操作* */if (a[tx][ty] == 0 && book[tx][ty] == 0) {/*** 標記為已拓展,不同于DFS的是,BFS每個點只會被拓展一次,無需進行回溯* */min = queue.peek().s + 1;book[tx][ty] = 1;queue.add(new Point(tx, ty, min));}if (tx == p && ty == q) {flag = 1;break;}}if (flag == 1) {/*** 這里要注意的是,每次拓展完,且未到達目標位置時都會移出隊首元素一次,* 但是最后一次隊列中至少存在兩個元素,即正在處理的點,和這個點拓展到的目標* 而直接出隊操作是做不到的(即使將出隊操作提前也不能實現),而且,* 當大于兩個點的時候,一次出隊也不能起到實質性的作用* 所以在這里我們在上個判斷中直接改變全局變量mark的值即可實現* */break;}queue.remove();}} }

總結

以上是生活随笔為你收集整理的搜索算法(一)--DFS/BFS求解拯救同伴问题(JAVA)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 最新av电影网站 | 美国毛片av | 日韩三级一区二区三区 | 99热在线观看免费精品 | 久草视频观看 | 久久精品无码一区二区三区 | 日本精品一区在线观看 | 免费在线不卡av | 中文字幕日韩电影 | 午夜视频日韩 | av网站大全免费 | 国产成人福利在线 | 99嫩草 | 朝鲜一级黄色片 | 亚洲av人无码激艳猛片服务器 | 黑人巨大av | 美女扒开腿让男生捅 | 亚洲第一伊人 | 无码精品黑人一区二区三区 | 黄色一级a毛片 | jizz中国女人高潮 | 男女做激情爱呻吟口述全过程 | 久久久久久久久久国产 | 狠狠操一区 | 黄色资源在线观看 | 国产精一区 | 国产伦精品一区二区三区在线 | 污污在线看 | 一区二区三区视频在线免费观看 | 色噜噜一区二区三区 | 精品久久久久一区二区 | 天天操好逼 | 5个黑人躁我一个视频 | 嫩草视频在线免费观看 | 亚洲国产天堂 | 国产欧美日韩三区 | 天天射天天色天天干 | 男生女生羞羞网站 | 国产91精品一区二区 | 国产精品无码中文字幕 | www.在线看| 在线免费黄色片 | 伊人91| 91一区二区| www久久久久久 | 少妇又色又爽又高潮极品 | 欧洲亚洲女同hd | 成人午夜影视在线观看 | 97色婷婷| 一区二区小说 | 激情五月婷婷丁香 | 爱乃なみ加勒比在线播放 | 一级片免费网址 | 国产精品天天干 | 国产精品一区二区三区免费 | 风韵多水的老熟妇 | 97精品一区二区三区 | 亚欧精品视频一区二区三区 | 在线视频中文字幕 | 极品粉嫩小仙女高潮喷水久久 | 91九色国产ts另类人妖 | 偷拍亚洲精品 | 99亚洲国产精品 | 乖疼润滑双性初h | www.色啪啪.com | 天堂综合网 | 国产美女福利在线 | 中文字幕一区二区三区免费 | 亚洲av无一区二区三区怡春院 | 一区二区国产在线 | 337p粉嫩大胆色噜噜噜 | 看黄免费网站 | 黄色一级片免费观看 | 在线色 | 双性人妖互交localhost | 久久国产香蕉 | 3d动漫精品啪啪一区二区下载 | 可以直接看av的网址 | 天堂av亚洲av国产av电影 | 亚洲性色av | 在线免费观看国产视频 | 色爱综合网 | 国产精品三| 亚洲一区欧美激情 | 99精品久久久 | 妹子干综合网 | 看黄色a级片 | 中文字幕在线2021 | 制服丝袜中文字幕在线 | 中文字幕av专区dvd | 亚洲欧美一区二区三 | 欧美日韩免费看 | 亚洲精品成人区在线观看 | 精品久久91 | 91精品国产一区二区三竹菊影视 | 北京富婆泄欲对白 | 爱爱网视频| av免费福利 | 亚洲视频精品一区 |