日韩性视频-久久久蜜桃-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)的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 色中文字幕在线观看 | 日韩午夜 | 国产剧情一区二区三区 | 四虎精品欧美一区二区免费 | 国产在线高清视频 | 国产一级免费观看 | 亚洲av永久中文无码精品综合 | 中文字幕一区二区三区四区视频 | 成人福利视频导航 | 日日夜夜亚洲 | 男性影院 | 美女伦理水蜜桃4 | 亚洲乱码精品 | 人妻熟人中文字幕一区二区 | 国产美女免费看 | 影音先锋中文字幕资源 | 天天插天天操 | 午夜dv内射一区二区 | 欧美一级看片 | 精品无码久久久久久久久成人 | 国产精品亚洲五月天丁香 | 亚洲中文无码久久 | 伊人免费| 国产最新在线观看 | 天天色综合图片 | 欧美亚洲激情 | 女人性做爰24姿势视频 | 亚洲一区二区三区在线播放 | 国精产品一区一区三区有限公司杨 | 免费高清毛片 | 99riav视频| 久久极品 | 成人黄色三级视频 | 色婷婷在线观看视频 | ass极品水嫩小美女ass | 亚洲free性xxxx护士白浆 | 亚洲一区观看 | 永久免费,视频 | 久久水蜜桃 | 青青草网址 | 九九九久久久精品 | 特级淫片aaaaaaa级 | 久久91亚洲人成电影网站 | 黄色a在线 | 久久视频中文字幕 | 视频一区二区三 | 一级片黄色的 | 自拍99页 | 久久久久久一级片 | 国产特黄级aaaaa片免 | 午夜视频在线观看免费视频 | 亚洲人成电影一区二区在线 | 国产成年人视频网站 | 久久久免费高清视频 | 欧美性受xxxx狂喷水 | 欧美日韩一卡 | 毛片在线免费观看网址 | 日本成人三级 | 办公室荡乳欲伦交换bd电影 | 中文字幕欧美专区 | 男生插女生网站 | 99久久久久 | 哺乳期喷奶水丰满少妇 | 香蕉伊人 | 国产精品二三区 | 成人黄色短视频在线观看 | 色婷婷中文字幕 | 综合在线一区 | 综合五月网| 超碰一区 | 名校风暴在线观看免费高清完整 | 午夜激情影院 | 亚洲在线观看免费 | 久久精品一区二区三 | 制服诱惑一区二区 | 中文字幕视频网 | 亚洲精品色图 | 日韩中文字幕在线不卡 | 日韩精品视频在线观看网站 | 亚洲国产日韩一区二区 | 国产精品99久久久久久一二区 | 91色国产| 色狠av| 国产成人av影院 | 免费一级a毛片夜夜看 | 四川丰满少妇被弄到高潮 | 欧美性受xxxx狂喷水 | 日本一区二区免费看 | 爱情岛论坛成人 | 性开放的欧美大片 | 最新天堂中文在线 | 久久久久久久久久久综合 | 手机亚洲第一页 | 五月婷婷在线观看 | 一区二区免费 | 免费毛片看片 | 成人图片小说 | 在线电影一区二区三区 | 日本少妇喷水视频 |