深搜(dfs)-廣搜(bfs)python實現
阿新 • • 發佈:2019-01-13
基於鄰接表的深搜和廣搜
圖:(忽略邊權,這裡只看邊)
import sys from queue import Queue sys.setrecursionlimit(1000000) # 深搜 def dfs(start, graph, vis): print(start, end=' ') vis[start] = True for sub in graph[start]: if not vis[sub]: dfs(sub, graph, vis) # 廣搜 def bfs(start, graph): n = len(graph) queue = [] queue.append(start) vis = [False for _ in range(n)] vis[start] = True while queue: tem = queue.pop(0) print(tem, end=' ') for sub in graph[tem]: if not vis[sub]: queue.append(sub) vis[sub] = True def bfs_queue(start, graph): n = len(graph) queue = Queue() queue.put(start) vis = [False for _ in range(n)] vis[start] = True while not queue.empty(): tem = queue.get() print(tem, end=' ') for sub in graph[tem]: if not vis[sub]: queue.put(sub) vis[sub] = True n = 7 # 圖的邊資料 data = [ [1, 0], [1, 2], [1, 3], [1, 6], [2, 0], [0, 6], [3, 6], [3, 4], [0, 5], [5, 6], [5, 3], [5, 4] ] # 構建鄰接表 n_node = 7 graph = [[] for _ in range(n_node)] for edge in data: graph[edge[0]].append(edge[1]) graph[edge[1]].append(edge[0]) print('深搜dfs') dfs(0, graph, [False for _ in range(n)]) print('\n廣搜bfs') bfs(0, graph) print('\nbfs_queue') bfs_queue(0, graph) # 執行結果: # 深搜dfs # 0 1 2 3 6 5 4 # 廣搜bfs # 0 1 2 6 5 3 4 # bfs_queue # 0 1 2 6 5 3 4