版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_33612918/article/details/78724316
广度优先搜索
适用范围: 无权重的图,与深度优先搜索相比,深度优先搜索法占内存少但速度较慢,广度优先搜索算法占内存多但速度较快
复杂度: 时间复杂度为O(V+E),V为顶点数,E为边数
图片如下所示:
代码:
const map = [
[0, 1, 1, 0, 1],
[1, 0, 0, 1, 0],
[1, 0, 0, 0, 1],
[0, 1, 0, 0, 0],
[1, 0, 1, 0, 0]
]
function bfs(map, start, end){
let queue = [],
vertex_num = map.length, //节点数
count = 0, //迭代次数
unvisited = [], //保存还未访问过的节点
step_dict = []; //记录步长
//init
for(let i=0; i<vertex_num; i++){
unvisited[i] = true
step_dict[i] = 0
}
queue.push(start)
while(queue.length){
let flag = false //若遇到孤立节点,则跳过而不加count
let cur = queue.shift()
step_dict[cur]++
unvisited[cur] = false
for(let i=0; i<vertex_num; i++){
if(map[cur][i] === 1 && unvisited[i] === true){
queue.push(i)
unvisited[i] = false
step_dict[i] = count
flag = true
}
}
if(flag){
count++
}
}
return step_dict[end]
}
//测试
console.log(bfs(map,3,4))
output
3