BFS 伪代码
while queue 非空:
node = queue.pop()
for node 的所有相邻结点 m:
if m 未访问过:
queue.push(m)
求无权最短路径的 BFS 伪代码
求 A 点到 B 点的最短距离,就是看 A 点到 B 点有多少层,所以需要修改代码,记录层数
depth = 0 # 记录遍历到第几层
while queue 非空:
depth++
n = queue 中的元素个数
循环 n 次:
node = queue.pop()
for node 的所有相邻结点 m:
if m 未访问过:
queue.push(m)
Golang 实现
var griph [][]int,
visited := make([]bool, len(graph))
visited[0] = true // 是否访问
depth := 0 // 层
queue := make([]int, 0) // 模拟队列
queue = append(queue, 0)
dist := make([]int, len(graph)) // 0 节点到每个节点的距离
for len(queue) != 0 {
depth++
n := len(queue)
for i := 0; i < n; i++ {
node := queue[0]
queue = append(queue[:0], queue[1:]...)
for j := 0; j < len(graph); j++ {
if graph[node][j] == 1 {
if visited[j] == false {
visited[j] = true
queue = append(queue, j)
dist[j] = depth
}
}
}
}
}