最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

有趣的圖(三)(57)

2023-06-14 07:00 作者:和貓妹學Python  | 我要投稿

小朋友們好,大朋友們好!

我是貓妹,一名愛上Python編程的小學生。

和貓妹學Python,一起趣味學編程。

今日主題

咱們之前分別學習了圖的基本概念,和圖的深度優(yōu)先遍歷算法dfs。

你學會了嗎?

咱們今天要學習圖的另一種遍歷方法:

廣度優(yōu)先遍歷

廣度優(yōu)先遍歷

廣度優(yōu)先遍歷(Breadth First Search)是一種圖的遍歷算法,它從一個頂點出發(fā),沿著與該頂點相鄰的所有邊進行遍歷,直到無法繼續(xù)為止。

然后再回溯到上一個頂點,沿著與該頂點不相鄰的其他邊進行遍歷,直到無法繼續(xù)為止。

重復這個過程,直到所有頂點都被訪問過為止。

深度優(yōu)先和廣度優(yōu)先

分別對下圖進行深度優(yōu)先遍歷和廣度優(yōu)先遍歷

深度優(yōu)先搜索(Depth First Search)

先選擇一條路一直往前走,走到盡頭后,就返回到上一個交叉路口選擇另一條沒走過的路。

一直重復,這樣就能走完所有的地點。

像不像老鼠走迷宮,一條路一條路地嘗試?

深度優(yōu)先搜索的一種實現:

廣度優(yōu)先搜索(Breadth First Search)

從頂點開始,先訪問距離起始頂點長度為1的頂點,再訪問距離起始頂點長度為2的頂點。

如此反復。

廣度優(yōu)先搜索的一種實現:

廣度優(yōu)先代碼實現

假設從0開始,實現上圖的廣度優(yōu)先遍歷。

首先訪問距離頂點0長度為1的結點{1,2,3}

然后訪問距離頂點0長度為2的頂點{4,6},

然后訪問長度為3的頂點{5},

最后訪問長度為4的頂點{7}。

具體該怎么實現呢?

這里需要用到一個雙端隊列。

雙端隊列

雙端隊列(Deque)是一種允許我們同時從前端和后端添加和刪除元素的特殊隊列,它是隊列和棧的結合體。?

相對于普通隊列,雙端隊列的入隊和出隊操作在兩端都可進行。

雙端隊列初始狀態(tài)為{0}。

我們訪問0后,0從隊首出隊,同時用集合記錄0已經被訪問。將0的鄰接頂點{1,2,3}從對尾入隊,這都是距離起始頂點長度為1的節(jié)點。

然后1從隊首出隊,同時用集合記錄1已經被訪問。將1的鄰接頂點從對尾入隊,這都是距離起始頂點長度為2的節(jié)點。(也可能是2或3,看123入隊的順序)。

依次訪問2和3,并用集合記錄以訪問,其鄰接頂點分別從隊尾入隊。

如上反復,知道雙端隊列為空。

參考代碼:

1行:deque 是Python標準庫 collections 中的一個類,實現了兩端都可以操作的隊列,相當于雙端隊列,與Python的基本數據類型列表很相似。

15行:將起始頂點的鄰接頂點添加到隊列中。

16行:將起始頂點放入以訪問過的結合中。

17行:如果隊列非空,則繼續(xù)訪問。

18行:從隊首彈出元素,進行訪問。

20~23行:判斷出隊元素的鄰接頂點沒有被訪問,放入隊列尾部。

你學會了嗎?

好了,我們今天就學到這里吧!

如果遇到什么問題,咱們多多交流,共同解決。

我是貓妹,咱們下次見!


有趣的圖(三)(57)的評論 (共 條)

使用qq登录你需要登录后才可以评论。
黔西县| 涟源市| 陕西省| 垣曲县| 电白县| 清水河县| 达拉特旗| 牡丹江市| 肇东市| 宜宾县| 莫力| 宁陕县| 星子县| 神木县| 鄂托克旗| 会泽县| 萍乡市| 杭锦后旗| 南川市| 开化县| 荔波县| 怀集县| 榆林市| 那坡县| 来宾市| 油尖旺区| 探索| 张北县| 中超| 都兰县| 玉龙| 康平县| 鹤庆县| 额济纳旗| 罗源县| 宜昌市| 新沂市| 犍为县| 抚州市| 孟村| 闽侯县|