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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

dfs遍历和bfs遍历python_广度优先遍历(BFS)和深度优先遍历(DFS)

發(fā)布時間:2025/3/19 python 12 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dfs遍历和bfs遍历python_广度优先遍历(BFS)和深度优先遍历(DFS) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

BFS:

思想:

對于圖中的初始節(jié)點,先遍歷初始節(jié)點的一階鄰居,當初始節(jié)點的一階鄰居都被遍歷完了之后,再遍歷初始節(jié)點的二階鄰居,直至所有節(jié)點都被遍歷完(或找到符合條件的節(jié)點)

過程:

三要素:(1)先入先出的一個容器:隊列;(2)圖中的節(jié)點:最好寫成單獨的一個類表示;(3)已訪問集合:避免重復訪問。

算法過程:

(1)首先將根節(jié)點放入隊列中

(2)取出隊列中的第一個節(jié)點進行訪問,并將其所有未被訪問的鄰居節(jié)點添加到隊列中

(3)若隊列為空則算法結束

時間復雜度:

廣度優(yōu)先遍歷算法的時間復雜度并不確定,取決于用何種方式來表示圖。

實例:

力扣第279題完全平方數(shù),題目鏈接(https://leetcode-cn.com/problems/perfect-squares/):

給定正整數(shù) n,找到若干個完全平方數(shù)(比如 1, 4, 9, 16, …)使得它們的和等于 n。你需要讓組成和的完全平方數(shù)的個數(shù)最少。

分析:本題可以用動態(tài)規(guī)劃的方法解,此處用廣度優(yōu)先遍歷的方法解題

首先我們把正整數(shù)n看作是圖中的初始節(jié)點,用完全平方數(shù)表示圖中的邊,n減去完全平方數(shù)后表示n的鄰居節(jié)點。因此本題可以轉換為找從n到0的最短路徑。

#定義圖中節(jié)點的類型,包含val和passed(經過的路徑數(shù))

class Node:

def __init__(self,val,passed = 0):

self.val = val

self.passed = passed

class Solution:

def numSquares(self, n: int) -> int:

jiedian = [Node(n)]#將初始節(jié)點放入隊列

visited = [0]*n + [1]#定義節(jié)點是否被訪問過,避免訪問重復的節(jié)點

while jiedian:

tmp = jiedian.pop(0)#彈出首節(jié)點

#判斷是否符合條件

for i in range(1,int(math.sqrt(tmp.val)+1)):

tmp_val = tmp.val - i*i

if tmp_val == 0:

return tmp.passed + 1

elif visited[tmp_val] == 0:

jiedian.append(Node(tmp_val,tmp.passed + 1))#將節(jié)點的鄰居節(jié)點添加到隊列

visited[tmp_val] = 1#將節(jié)點進行標記,避免重復訪問

DFS:

思想:

從初始節(jié)點出發(fā),一直沿著某條邊訪問下去,直至該路徑上的所有節(jié)點均被訪問過,再回到初始節(jié)點,從初始節(jié)點出發(fā),沿著另一條路徑開始訪問,直至圖中所有節(jié)點均被訪問。

過程:

三要素:(1)先入先出的一個容器:棧;(2)圖中的節(jié)點:最好寫成單獨的一個類表示;(3)已訪問集合:避免重復訪問。

算法過程:

(1)先將初始節(jié)點放入隊列中

(2)將隊列中取出第一個節(jié)點進行訪問,將它某一個未被訪問的節(jié)點加入隊列中

(3)重復2

(4)若不存在為訪問的鄰居節(jié)點,將上一級節(jié)點加入到隊列中,重復2

(5)直至隊列為空

時間復雜度:

與BFS類似。

實例:

力扣695. 島嶼的最大面積(題目鏈接https://leetcode-cn.com/problems/max-area-of-island/)

給定一個包含了一些 0 和 1 的非空二維數(shù)組 grid 。

一個 島嶼 是由一些相鄰的 1 (代表土地) 構成的組合,這里的「相鄰」要求兩個 1 必須在水平或者豎直方向上相鄰。你可以假設 grid 的四個邊緣都被 0(代表水)包圍著。

找到給定的二維數(shù)組中最大的島嶼面積。(如果沒有島嶼,則返回面積為 0 。)

分析:

圖中每塊陸地都可以當作一個節(jié)點,兩個1上下左右相連視為一條邊,則可以構成很多圖。

#深度優(yōu)先遍歷搜索

class Solution:

def maxAreaOfIsland(self, grid: List[List[int]]) -> int:

ans = 0#存儲結果

for i, m in enumerate(grid):

for j, n in enumerate(m):

strack = [(i,j)]#棧

tmp = 0#記錄每一塊的面積

while strack:

cur_i, cur_j = strack.pop()#彈出棧尾的數(shù)據(jù)

if cur_i<0 or cur_j<0 or cur_i==len(grid) or cur_j==len(grid[0]) or grid[cur_i][cur_j] != 1:

continue

grid[cur_i][cur_j] = 0#避免重復訪問

tmp += 1

for k,p in [[0,1],[0,-1],[1,0],[-1,0]]:

next_i = cur_i + k

next_j = cur_j + p

strack.append((next_i,next_j))

ans = max(ans,tmp)

return ans

其實此題還可以用廣度優(yōu)先遍歷的方法解答:

class Solution:

def maxAreaOfIsland(self, grid: List[List[int]]) -> int:

ans = 0#存儲結果

for i, m in enumerate(grid):

for j, n in enumerate(m):

strack = [(i,j)]#隊列

tmp = 0#記錄每一塊的面積

while strack:

cur_i, cur_j = strack.pop(0)#先彈出隊首的數(shù)據(jù)

if cur_i<0 or cur_j<0 or cur_i==len(grid) or cur_j==len(grid[0]) or grid[cur_i][cur_j] != 1:

continue

grid[cur_i][cur_j] = 0

tmp += 1

for k,p in [[0,1],[0,-1],[1,0],[-1,0]]:

next_i = cur_i + k

next_j = cur_j + p

strack.append((next_i,next_j))

ans = max(ans,tmp)

return ans

總結:

通過上面這個題,可以看出廣度優(yōu)先和深度優(yōu)先的區(qū)別只是遍歷圖中節(jié)點的順序不同,廣度優(yōu)先遍歷的順序是先遍歷節(jié)點的所有一階鄰居節(jié)點,然后所有二階鄰居節(jié)點。。。***可以借助隊列這種數(shù)據(jù)結構實***現(xiàn)。深度優(yōu)先遍歷的是沿著一條邊不停遍歷下去,直至結束,才開始下一條邊,可以借助棧來實現(xiàn)。

原文鏈接:https://blog.csdn.net/scp_6453/article/details/106601947

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的dfs遍历和bfs遍历python_广度优先遍历(BFS)和深度优先遍历(DFS)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产婷婷色一区二区在线观看 | 国产精品69久久久久孕妇欧美 | 欧美日韩中文字幕一区二区 | 无码aⅴ精品一区二区三区 精品久久在线 | 亚洲综合视频在线 | 在线视频午夜 | 黑鬼大战白妞高潮喷白浆 | 中文字幕日韩国产 | 尤物综合网| 内谢少妇xxxxx8老少交视频 | 亚洲免费小视频 | 日本理论中文字幕 | se欧美| 在线观看免费人成视频 | 在线看v片 | 爱爱高潮视频 | 男人肌肌桶女人肌肌 | 亚洲另类色综合网站 | 污污动态图 | 91在线看视频 | 91精品欧美一区二区三区 | 日韩视频在线播放 | 俄罗斯porn | 国产精品久线在线观看 | 色综合天天综合综合国产 | 国产夫妇交换聚会群4p | 国产精品久久久久久久一区探花 | 中午字幕在线观看 | 亚洲国产精品无码久久 | 91香草视频 | 91美女视频网站 | 人人爽夜夜爽 | 欧美jjzz | avwww| 久久精品无码一区二区三区免费 | 中文在线亚洲 | 国产热视频 | 99re8在线精品视频免费播放 | 精品一区三区 | 邵氏电影《金莲外传2》免费观看 | 免费视频网站在线观看入口 | 亚洲精品网址 | 毛茸茸成熟亚洲人 | 国产午夜免费福利 | 黄色91| 国内自拍视频在线观看 | 操你啦在线视频 | 日本污网站| 一区二区三区亚洲视频 | 日韩欧美精品在线视频 | 黄色三级三级三级 | 热99在线 | 欧洲成人午夜精品无码区久久 | 久久99精品久久久久久国产越南 | 日韩精品福利视频 | 97夜夜| 中文字幕不卡一区 | 一本大道伊人av久久综合 | 91av国产视频 | 最色成人网| 国产成人精品久久二区二区 | 亚洲第一黄色片 | 三级欧美视频 | 亚洲国产精品成人综合久久久 | 影音先锋在线播放 | 国产又爽又黄无码无遮挡在线观看 | 欧美草b | 亚洲成a人v| а√天堂8资源中文在线 | 国产片在线 | 视频在线观看电影完整版高清免费 | 日韩欧美aⅴ综合网站发布 国产成人一区二区三区小说 | 麻豆精品在线视频 | 国产ts丝袜人妖系列视频 | 小泽玛利亚一区二区三区视频 | 性欢交69精品久久久 | gogo人体做爰aaaa | 强行挺进白丝老师里呻吟 | 中文字幕avav | 天天插天天| 麻豆导航| 激情四射婷婷 | 国久久| 少妇裸体性生交 | 国产乱码精品一区二区三区精东 | 久久久999 | 天天色视频 | 精品国产999久久久免费 | 国产剧情在线一区 | 欧美 日韩 国产 成人 在线 91 | a免费观看| 极品美女扒开粉嫩小泬 | 97热视频| 欧美第七页 | 国产一区二区在线不卡 | 日韩在线视频播放 | 美女一区二区三区视频 | 九七av | 日韩三级视频在线播放 |