1. 程式人生 > >圖及演算法----遍歷演算法(迭代實現)

圖及演算法----遍歷演算法(迭代實現)

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] while
queue: 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