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

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/qq_33612918/article/details/78724316
今日推荐