在使用BFS算法时,我们首先需要了解邻接矩阵的表示方式。邻接矩阵是一个二维数组,用于表示图中每个节点之间的连接关系。具体来说,如果节点i和节点j之间有一条边,那么邻接矩阵中的a[i][j]和a[j][i]的值都为1,否则为0或其他值(比如权重)。
下面是通过邻接矩阵找到最短路径的代码示例:
from queue import Queue
def bfs_shortest_path(adj_matrix, start, end):
queue = Queue()
visited = set() # 记录已经访问过的节点
queue.put(start)
visited.add(start)
# distances记录每个节点到起点的距离
# parents记录每个节点在最短路径上的前一个节点
distances = {start: 0}
parents = {start: None}
while not queue.empty():
node = queue.get()
if node == end: # 找到了终点
path = []
while node is not None:
path.append(node)
node = parents[node]
path.reverse()
return path
for neighbor, weight in enumerate(adj_matrix[node]):
if weight == 0: # 不存在连接关系
continue
if neighbor not in visited:
queue.put(neighbor)
visited.add(neighbor)
distances[neighbor] = distances[node] + 1 # 更新距离
parents[neighbor] = node # 更新前一个节点
return None # 没有找到路径
在代码中,我们使用了一个队列来实现BFS算法。变量visited用于记录已经访问过的节点,避免重复访问。变量distances用于记录每个节点到起点的距离,变量parents用于记录每个