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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【bfs基础】①

發布時間:2024/4/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【bfs基础】① 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

bfs,即廣度優先搜索,主要通過隊列(queue)進行操作。
稍微解釋一下,隊列是一種基礎數據結構,其形態類似于一支長長的隊伍,大概如下:

在C++中,隊列的頭文件定義為:#include<queue>
隊列的聲明:queue<T1> q;
這樣就定義了一個數據類型為"T1"的隊列q。
成員函數及作用集合:

q.empty()判斷隊列q是否為空,當隊列q空時,返回true;否則為false(值為0(false)/1(true))。
q.size()訪問隊列q中的元素個數。不可寫成sizeof(q)或size(q)
q.push()會將一個元素a置入隊列q中
q.front()返回隊列q內的第一個元素(也就是第一個被置入的元素)。(不可寫成front(q))
q.pop()會從隊列q中移除第一個元素。(不可寫成pop(q))

隊列是一種非常常見的數據結構,最常用于bfs(廣度優先搜索)。

廣度優先搜索可以將其想象成水滴落入水面濺起了的一圈一圈的漣漪,是由一個起始點開始一圈一圈進行擴散搜索的。(請一定要自行想象這個過程,非常重要!)
就比如這樣一個丑陋的 圖:

從頂點1開始搜索,廣搜過程依次為:1-2-3-4-5-6-7-8.
從頂點1開始搜索,深搜過程依次為:1-2-3-5-7-8-4-6.
很明顯,廣搜是一次性把與當前頂點有連通關系的點全部搜索完了,才搜索更下一層
這樣就可以很清楚的有深搜的思路并用代碼實現了:

偽代碼:

void bfs(起始點) {將起始點放入隊列中;標記起點訪問;while (如果隊列不為空){訪問隊列中隊首元素x;刪除隊首元素; for (x 所有相鄰點){if (該點未被訪問過且合法) {將該點加入隊列末尾;} } }隊列為空,廣搜結束; }

例題:單向公路
例題:密碼鎖
今天就講到這里,后續會持續更新。

?

轉載于:https://www.cnblogs.com/moyujiang/p/11167778.html

總結

以上是生活随笔為你收集整理的【bfs基础】①的全部內容,希望文章能夠幫你解決所遇到的問題。

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