五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

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

有趣的圖(三)(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)的評論 (共 條)

分享到微博請遵守國家法律
六盘水市| 哈巴河县| 武平县| 长汀县| 蒙山县| 武冈市| 皋兰县| 温州市| 增城市| 安宁市| 灵山县| 青阳县| 那坡县| 泽库县| 凤翔县| 上犹县| 昆明市| 太仆寺旗| 建始县| 寿阳县| 英山县| 兴和县| 新昌县| 吴旗县| 志丹县| 内黄县| 屏南县| 泰州市| 揭东县| 始兴县| 囊谦县| 缙云县| 汨罗市| 莱州市| 洛扎县| 托克逊县| 邯郸县| 永靖县| 南丹县| 台南市| 宁陵县|