📅  最后修改于: 2023-12-03 14:54:56.625000             🧑  作者: Mango
本文将介绍有关数据结构图的问题8,包括定义、算法和示例。
问题8是一个图问题,给定一幅有向图G和一个起点s,找出从s到每一个可达顶点的路径(不包括起点s)。并且要求计算从起点s到每一个可达顶点的最短距离,并且输出最短路径。
本问题可以使用广度优先搜索(BFS)算法来解决。首先,从起点s开始,将其加入到队列中。每次从队列中取出队首元素u,并遍历u的所有邻接点v。如果v尚未被访问过,则将其标记为已访问,并将v加入队列。同时,记录下从s到v的最短距离和路径。
BFS算法的时间复杂度为O(V+E),其中V是顶点数,E是边数。
以下是使用Python语言实现BFS算法来解决问题8的示例代码:
from queue import Queue
def bfs(graph, start):
visited = set()
dist = {start: 0}
path = {start: [start]}
q = Queue()
q.put(start)
visited.add(start)
while not q.empty():
u = q.get()
for v in graph[u]:
if v not in visited:
visited.add(v)
dist[v] = dist[u] + 1
path[v] = path[u] + [v]
q.put(v)
return dist, path
# 示例
G = {
"A": ["B", "C"],
"B": ["D", "E"],
"C": ["D", "F"],
"D": ["E", "F"],
"E": ["F"],
"F": []
}
dist, path = bfs(G, "A")
print("dist:", dist)
print("path:", path)
输出结果:
dist: {'A': 0, 'B': 1, 'C': 1, 'D': 2, 'E': 2, 'F': 3}
path: {'A': ['A'], 'B': ['A', 'B'], 'C': ['A', 'C'], 'D': ['A', 'B', 'D'], 'E': ['A', 'B', 'E'], 'F': ['A', 'C', 'F']}
以上示例输出了从起点A到每个可达顶点的最短距离和路径。