使用nodejs编写一个深度优先搜索遍历图例子

深度优先搜索

深度优先搜索算法(Depth First Search,简称DFS):一种用于遍历或搜索树或图的算法。 沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或者在搜寻时结点不满足条件,搜索将回溯到发现节点v的那条边的起始节点。整个进程反复进行直到所有节点都被访问为止。属于盲目搜索,最糟糕的情况算法时间复杂度为O(!n)。
深度优先搜索有两种方式实现,一种是利用栈先入后出,另一种是递归的方式,不过递归的本质就是在压栈弹出的过程。本案例将使用递归的方式。

nodejs

Node.js是一个Javascript运行环境(runtime)。实际上它是对Google V8引擎进行了封装。V8引 擎执行Javascript的速度非常快,性能非常好。Node.js对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。

Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。

好了对nodejs的介绍就到这里。

图的数据

一共有a,b,c,d,e,f六个顶点

const graph={
    a:['c','b'],
    b:['d'],
    c:['e'],
    d:['f'],
    e:[],
    f:[]
};

 定义深度优先搜索算法

//栈方式定义
const depthFirstPrint=(graph,source)=>{
    const stack=[source];

    while (stack.length>0){
        const current =stack.pop();
        console.log(current);

        for (let neighbor of graph[current]){
            stack.push(neighbor)
        }
    }
};

//递归方式定义
const depthFirstPrint2=(graph,source)=>{
    console.log(source)
    for (let neighbor of graph[source]){
        depthFirstPrint2(graph,neighbor)
    }
}

测试结果

可以看到,使用递归遍历图的算法就是这么简单,短短几行就可以写完了。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值