BFS

//BFSgraph = {"A": ["B", "C"],"B": ["A", "C", "D"],"C": ["A", "B", "D", "E"],"D": ["B", "C", "E", "F"],"E": ["C", "D"],"F": ["D"]}def BFS(graph, s):queue = []queue.append(s)seen = set()seen.add(s)while (len(queue) > 0):vertex = queue.pop(0)nodes = graph[vertex]for w in nodes:if w not in seen:queue.append(w)seen.add(w)print(vertex)
DFS
//DFSgraph = {"A": ["B", "C"],"B": ["A", "C", "D"],"C": ["A", "B", "D", "E"],"D": ["B", "C", "E", "F"],"E": ["C", "D"],"F": ["D"]}def DFS(graph, s):stack = []stack.append(s)seen = set()seen.add(s)while (len(stack) > 0):vertex = stack.pop()nodes = graph[vertex]for w in nodes:if w not in seen:stack.append(w)seen.add(w)print(vertex)DFS(graph, "A")

最短路径
graph = {"A": ["B", "C"],"B": ["A", "C", "D"],"C": ["A", "B", "D", "E"],"D": ["B", "C", "E", "F"],"E": ["C", "D"],"F": ["D"]}def BFS(graph, s):queue = []queue.append(s)seen = set()seen.add(s)parent = {s : None}while (len(queue) > 0):vertex = queue.pop(0)nodes = graph[vertex]for w in nodes:if w not in seen:queue.append(w)seen.add(w)parent[w] = vertexprint(vertex)return parentparent = BFS(graph, "E")//打印出路径映射表for key in parent:print(key, parent[key])//如何从B走到Ev = "B"while v != None:print(v)v = parent[v]
Dijkstra算法
import heapqimport mathgraph = {"A": {"B": 5, "C": 1},"B": {"A": 5, "C": 2, "D": 1},"C": {"A": 1, "B": 2, "D": 4, "E": 8},"D": {"B": 1, "C": 4, "E": 3, "F": 6},"E": {"C": 8, "D": 3},"F": {"D": 6},}def init_distance(graph, s):distance = {s: 0}for vertex in graph:if vertex != s:distance[vertex] = math.infreturn distancedef dijkstra(graph, s):pqueue = []heapq.heappush(pqueue, (0, s))seen = set()parent = {s : None}distance = init_distance(graph, s)while (len(pqueue) > 0):pair = heapq.heappop(pqueue)dist = pair[0]vertex = pair[1]seen.add(vertex)nodes = graph[vertex].keys()for w in nodes:if w not in seen:if dist + graph[vertex][w] < distance[w]:heapq.heappush(pqueue, (dist + graph[vertex][w], w))parent[w] = vertexdistance[w] = dist + graph[vertex][w]parent[w] = vertexreturn parent, distanceparent, distance = dijkstra(graph, "A")print(parent)print(distance)
参考:
https://www.bilibili.com/video/BV1Ks411575U/?spm_id_from=333.788.recommend_more_video.-1
