经典算法研究系列;BFS和DFS优先搜索算法 | 您所在的位置:网站首页 › 优先搜索算法 › 经典算法研究系列;BFS和DFS优先搜索算法 |
经典算法研究系列;BFS和DFS优先搜索算法
328 经典算法研究系列;BFS和DFS优先搜索算法
关于此类BFS和DFS算法的文章,很多。但,都说不出个所以然来。 读完此文,我想, 你对图的广度优先搜索和深度优先搜索定会有个通通透透,彻彻底底的认识。 咱们由BFS开始: 首先,看下算法导论一书关于 此BFS 广度优先搜索算法的概述。 算法导论第二版,中译本,第324页。 广度优先搜索(BFS) 在Prime最小生成树算法,和Dijkstra单源最短路径算法中,都采用了与BFS 算法类似的思想。 //u 为 v 的先辈或父母。 BFS(G, s) 1 for each vertex u ∈ V [G] - {s} 2 do color[u] ← WHITE 3 d[u] ← ∞ 4 π[u] ← NIL //除了源顶点s之外,第1-4行置每个顶点为白色,置每个顶点u的d[u]为无穷大, //置每个顶点的父母为NIL。 5 color[s] ← GRAY //第5行,将源顶点s置为灰色,这是因为在过程开始时,源顶点已被发现。 6 d[s] ← 0 //将d[s]初始化为0。 7 π[s] ← NIL //将源顶点的父顶点置为NIL。 8 Q ← Ø 9 ENQUEUE(Q, s) //入队 //第8、9行,初始化队列Q,使其仅含源顶点s。10 while Q ≠ Ø 11 do u ← DEQUEUE(Q) //出队 //第11行,确定队列头部Q头部的灰色顶点u,并将其从Q中去掉。 12 for each v ∈ Adj[u] //for循环考察u的邻接表中的每个顶点v 13 do if color[v] = WHITE 14 then color[v] ← GRAY //置为灰色 15 d[v] ← d[u] + 1 //距离被置为d[u]+1 16 π[v] ← u //u记为该顶点的父母 17 ENQUEUE(Q, v) //插入队列中 18 color[u] ← BLACK //u 置为黑色
由下图及链接的演示过程,清晰在目,也就不用多说了:
相关阅读 CDA数据分析师还原真相!给数据分析领域真正的净土 ... CDA认证再升一档!与国家共同推进大数据人才培养标准教育 ... 企业如何利用商品推荐的大数据来破除实体寒冰? ... CDA认证再升一档!与国家共同推进大数据人才培养标准教育 ... 3个步骤+1个模型,「数据分析」才是「增长黑客」的核心技 ... 关于机器学习中需要我们知道的事情 中英文垃圾短信过滤 银行数据宽表构建和描述分析 |
CopyRight 2018-2019 实验室设备网 版权所有 |