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

来源:互联网 发布:淘宝皮草外套新款 编辑:程序博客网 时间:2024/06/06 01:09

广度优先搜索

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

复杂度: 时间复杂度为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
原创粉丝点击