使用Python的Graph()类实现图的广度优先搜索算法
发布时间:2024-01-04 12:35:17
广度优先搜索(BFS)是一种用于图的遍历算法,它从图的起始顶点开始,逐层地向外扩展,直到找到目标顶点或者遍历完整个图。该算法使用队列来保存待遍历的顶点,在实现中通常使用一个visited数组来记录已经访问过的顶点,以避免重复遍历。
下面我们使用Python的Graph()类来实现图的广度优先搜索算法,并给出一个使用例子。
首先,我们需要定义一个Graph类表示图,其中包括两个成员变量:一个用于存储图的顶点和边的字典,一个用于记录已经访问过的顶点的集合。
class Graph:
def __init__(self):
self.graph = {}
self.visited = set()
def add_vertex(self, vertex):
self.graph[vertex] = []
def add_edge(self, vertex1, vertex2):
self.graph[vertex1].append(vertex2)
self.graph[vertex2].append(vertex1)
def bfs(self, start_vertex):
queue = []
queue.append(start_vertex)
self.visited.add(start_vertex)
while queue:
current_vertex = queue.pop(0)
print(current_vertex, end=" ")
neighbors = self.graph[current_vertex]
for neighbor in neighbors:
if neighbor not in self.visited:
queue.append(neighbor)
self.visited.add(neighbor)
上面的代码中,我们定义了一个Graph类,其中的add_vertex()方法用于添加顶点,add_edge()方法用于添加边。bfs()方法是广度优先搜索的具体实现,它使用一个队列来保存待遍历的顶点,并逐个访问它们的邻居顶点。
下面是一个使用例子:
# 创建一个图
g = Graph()
# 添加顶点
g.add_vertex('A')
g.add_vertex('B')
g.add_vertex('C')
g.add_vertex('D')
g.add_vertex('E')
# 添加边
g.add_edge('A', 'B')
g.add_edge('A', 'C')
g.add_edge('B', 'D')
g.add_edge('B', 'E')
# 进行广度优先搜索
print("广度优先搜索结果:", end="")
g.bfs('A')
# 输出结果为:A B C D E
在这个例子中,我们创建了一个具有五个顶点和四条边的图,并进行了广度优先搜索。搜索结果按照顶点的访问顺序依次输出。
通过上面的代码,我们实现了用Python的Graph()类来进行图的广度优先搜索。该算法在许多实际应用中非常有用,比如用于寻找最短路径、解决迷宫等问题。
