您的位置:首页 > Web前端 > JavaScript

JS实现广度优先搜索得到两点间最短路径

2017-12-05 20:11 399 查看

广度优先搜索

适用范围: 无权重的图,与深度优先搜索相比,深度优先搜索法占内存少但速度较慢,广度优先搜索算法占内存多但速度较快

复杂度: 时间复杂度为O(V+E),V为顶点数,E为边数

图片如下所示:



代码:

const map = [
[0, 1, <
ad18
span class="hljs-number">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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息