圖及演算法----遍歷演算法(迭代實現)
阿新 • • 發佈:2018-12-06
1. 圖的遍歷
2.
3.
class Graph: def __init__(self): self.graph: Dict[str, List[str]] = defaultdict(list) def addEdge(self, u, v): self.graph[u].append(v) def dfs_traverse(graph, start): visited, stack = set(), [start] while stack: node= stack.pop() if node not in visited: visited.add(node) for nextNode in graph[node]: if nextNode not in visited: stack.append(nextNode) return visited def bfs_traverse(graph, start): visited, queue = set(), [start] whilequeue: node = queue.pop(0) if node not in visited: visited.add(node) for nextNode in graph[node]: if nextNode not in visited: queue.append(nextNode) return visited # 想象有個Actor在結構上行走,它必須維護它的狀態的變更,這是搜尋的本質 def BFS(graph, s): visited= set() queue = [] queue.append(s) while queue: s = queue.pop(0) print(s, end=" ") for i in graph[s]: if i not in visited: visited.add(i) queue.append(i) return visited def BFS2(graph, s): visited = set() queue = [] while True: print(s, end=" ") for i in graph[s]: if i not in visited: visited.add(i) queue.append(i) if queue: s = queue.pop(0) else: break print(queue) return visited