日韩性视频-久久久蜜桃-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熟女 | 中文字幕一区二区三区免费视频 | 麻豆视频在线观看免费网站黄 | 99热热热热| 精品国产免费视频 | 欧美日韩一区二区三区 | av每日更新在线观看 | 精品国产一区二区三区噜噜噜 | 日韩午夜电影网 | 喷潮在线 | 艳妇乳肉豪妇荡乳av | 亚洲精品理论 | 色又色| 男女一进一出视频 | 日韩一区二区三区不卡 | 99热一区| 一本—道久久a久久精品蜜桃 | h狠狠躁死你h高h | 亚洲激情图片 | 日本69视频 | 日韩福利片在线观看 | 在线播放成人 | 国产一区视频在线免费观看 | 特黄a级片 | 亚洲高清视频在线观看 | 国产调教在线 | 午夜一级免费 | 蜜臀av88| 天天干天天日 | 欧美巨大荫蒂茸毛毛人妖 | 色老头综合 | 色综合91| 久久露脸国语精品国产 | 国产aa| 三级av片 | 日本韩国欧美一区二区 | 国产一区资源 | 中文字幕欧美另类精品亚洲 | 国产中文字幕免费 | 色婷婷综合久久久久中文一区二区 | 午夜激情免费 | 午夜美女视频 | 校园激情av| 51调教丨国产调教视频 | 精品国产一区二区三区日日嗨 | 日韩一级二级三级 | 日韩三级在线播放 | 精品交短篇合集 | 在线一区二区三区视频 | 欧美精品色婷婷五月综合 | 变态视屏 | 国产乱码精品一区二区三区忘忧草 | 免费aa视频 | 亚洲国产三级 | 超碰2019| 日本不卡1 | 亚洲一区二区三区四区五区午夜 | 图书馆的女友在线观看 | 免费看60分钟黄视频 | 中文字幕超清在线免费观看 | 亚洲欧美精选 | 污视频网站在线看 | 精品视频一区二区三区在线观看 | 久久欧 | 91av影视 | 欧美性生话 | 国产精品三级 | 精品国产91乱码一区二区三区 | 亚洲人成人 | 精品一区二区在线播放 | 情侣在线视频 | 在线播放www | 日日夜夜狠狠干 | 大乳护士喂奶hd | 色葡萄影院 | 欧美激情偷拍 | 日韩深夜在线 | 午夜婷婷在线观看 | av在线手机观看 | 久久人妻无码aⅴ毛片a片app | 韩国电影一区二区三区 | 国产精品久久久久久久av福利 | 隔壁邻居是巨爆乳寡妇 | 国产二级一片内射视频播放 | 99国产精品久久久久久久成人 | 麻豆av片 | 中文字幕在线观看视频网站 | 成人免费视频网 | 精品黑人一区二区三区在线观看 | 欧美国产一区二区在线观看 | 欧美中文字幕在线观看 | 蜜臀av88| 成人av资源在线 | 黄色网址中文字幕 | 黄瓜视频污在线观看 | 日本美女久久久 | 日本黄色一区 |