五月天青色头像情侣网名,国产亚洲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)的評論 (共 條)

分享到微博請遵守國家法律
辉县市| 石屏县| 姜堰市| 巧家县| 隆林| 湖南省| 蒲江县| 茌平县| 鄄城县| 德清县| 义乌市| 获嘉县| 吉首市| 萝北县| 库伦旗| 陆良县| 方山县| 柳州市| 东光县| 万山特区| 吴堡县| 杭州市| 宁河县| 建瓯市| 康平县| 靖西县| 文化| 沛县| 甘泉县| 宁武县| 山东省| 天水市| 多伦县| 南宫市| 拜泉县| 梓潼县| 黔江区| 祥云县| 墨竹工卡县| 阿坝县| 贞丰县|