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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

广度优先搜索_深度优先搜索和广度优先搜索[09]

發布時間:2025/4/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 广度优先搜索_深度优先搜索和广度优先搜索[09] 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

搜索與遍歷

絕大多數搜索的處理叫暴力搜索,或者說比較簡單樸素的搜索。如果數據結構本身沒有任何特點,很普通的樹或者圖,我們要做的一件事就是把所有節點都遍歷一次。

  • 每個節點都要訪問一次
  • 每個節點僅僅要訪問一次
  • 對于節點的訪問順序不限
    • 深度優先搜索(Depth-First-Search)
    • 廣度優先搜索(Breadth-First-Search)
    • 也可以根據現實業務場景自定義優先級優先(啟發式搜索)

一、深度優先搜索(Depth-First-Search)

1.DFS訪問順序

樹訪問順序

圖訪問順序

2.代碼模板

# 示例代碼 def dfs(node):if node in visited:# already visitedreturnvisited.add(node)# process current node # ... # logic heredfs(node.left)dfs(node.right)#遞歸寫法(常用) visited = set() def dfs(node,visited):visited.add(node)# process current node here.# ... for next_node in node.children():if not next_node in visited:dfs(next node,visited)# 非遞歸寫法(模擬遞歸,用棧來解決) def DFS(self,tree):if tree.root is None:return []visited, stack = [], [tree.root]while stack:node = stack.pop()visited.add(node)process(node)nodes = generate_related_nodes(node)stack.push(nodes)# other processing work...# 遞歸寫法修改后的代碼模板(推薦記憶) visited = set() def dfs(node,visited):if node in visited: # terminator# already visitedreturnvisited.add(node)# process current node here.... for next_node in node.children():if not next_node in visited:dfs(next_node,visited)

二、廣度優先搜索(Breadth-First-Search)

1. 訪問順序

想象成水波紋,一層一層向外擴散。

訪問順序

2. 代碼模板

# BFS代碼(隊列和循環實現) def BFS(graph, start, end):queue = []queue.append([start])visited.add(start)while queue:node = queue.pop()visited.add(node)process(node)nodes = generate_related_nodes(node)queue.push(nodes)# other processing work...

三、搜索順序對比

DFS與BFS對比

總結

以上是生活随笔為你收集整理的广度优先搜索_深度优先搜索和广度优先搜索[09]的全部內容,希望文章能夠幫你解決所遇到的問題。

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