from collections import deque
class Graph:
"""
无向图,采用邻接表存储
v 顶点个数
adj 边
visited 被访问过的定点
d 队列
pre 搜索路径
"""
def __init__(self, v):
self.v = v
self.adj = [[] for _ in range(v)]
def add_edge(self, s, t):
self.adj[s].append(t)
self.adj[t].append(s)
def bfs(self, s, t):
if s == t:
return
visited = [False for _ in range(self.v)]
visited[s] = True
d = deque()
d.append(s)
prev = [-1 for _ in range(self.v)]
while d:
k = d.popleft()
for i in self.adj[k]:
if visited[i]:
continue
prev[i] = k
if i == t:
self.print_path(prev, s, t)
return
visited[i] = True
d.append(i)
def print_path(self, prev, s, t):
if t != s:
self.print_path(prev, s, prev[t])
print(t)
if __name__ == '__main__':
g = Graph(8)
g.add_edge(0, 1)
g.add_edge(3, 4)
g.add_edge(0, 3)
g.add_edge(3, 5)
g.add_edge(1, 2)
g.add_edge(2, 4)
g.bfs(1, 4)
图的遍历
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 深度优先遍历(DFS)Depth First search 连通图的深度优先遍历类似与树的先根遍历 算法实现 DF...
- 图的定义 图就是由顶点、边、权重的集合。 顶点 顶点一般表示对象属性特征 边 边表示对象事物的关系 权重 权重表示...