广度优先搜索
来源:互联网 发布:奶茶店市场调查数据 编辑:程序博客网 时间:2024/06/05 10:48
这是一篇介绍广度优先搜索的文章,网上有很多关于广度优先搜索的例子,这篇博客就当做是学习笔记吧!
图在计算机内的表示方法主要有邻接表和邻接矩阵两种。
- 邻接表:适合在稀疏图,且图的节点比较多的时候,邻接表在判断图的出度的时候比较方便,但是在判断入度的时候就需要遍历整个邻接链表来找到。邻接表存储图的空间复杂度为O(V + E)(V表示节点的个数,E则表示所有的边)
- 邻接矩阵:适合在稠密的节点比较少的图中。在判断出度,入度和判断是否存在从一个节点到另一个节点的边的时候使用比较方便;邻接矩阵存储图的空间复杂度为O(V * V).
一般情况默认使用邻接链表来存储矩阵,下面是搜索邻接链表的BFS算法。在遍历的过程中使用白色,黑色和灰色对节点进行标记:白色表示还没有访问的节点,灰色表示访问过,但是还没有将它的邻接节点访问完的节点,黑色则表示已经访问过且访问了所有它的邻接节点的节点。G(V, E)表示图,(u, v)表示从u节点到v节点的边,Vπ表示节点v的前驱节点:
BFS G(V, s) //s stands for the souce node //at first we need to initialize all the node; for all the vertex u in G(V, E) - {s} u.color = white; u.d = INT_MAX; u.π = NULL; s.color = grey; s.d = 0; s.π = NULL; queue<node> que; que.pus(s); while (!que.empty()) node temp = que.front(); que.pop(); for each v in G.Adj(u) v.color = grey; v.d = u.d + 1; v.π = u; que.push(v); temp.color = black;
这样就完成了对图的广度优先搜索遍历,事实上在遍历的过程中还可以建立个广度优先搜索树。
广度优先搜索的应用:
(1)判断一个图是不是连通的,广度优先搜索完成后,搜索到的节点包含了图上所有的节点,那么图就是连通的;
(2)寻找从一个节点到另一个节点的最短路径。
阅读全文
0 0
- 广度优先搜索算法
- 双向广度优先搜索
- 广度优先搜索法
- pku2251(广度优先搜索)
- POJ1184Clerver_Writer:广度优先搜索
- Java广度优先搜索
- [AI]广度优先搜索
- 广度优先搜索-BFS
- 广度优先搜索算法
- 广度优先搜索算法
- BFS广度优先搜索
- 广度优先搜索 BFS
- 广度优先搜索
- [ 算法 ]广度优先搜索!
- 广度优先搜索
- 广度优先搜索算法
- 广度优先搜索算法
- 广度优先搜索
- 对接口的一些初步理解
- 何勉培训公开课:精益、敏捷产品开发和创新管理·上海站
- jmeter 使用时间戳去redis获取验证码实现有验证码登录接口测试
- java简单编程(求和,求水仙花数,求完备数)
- web项目不能发布到tomcat中
- 广度优先搜索
- java报错:java.lang.Integer cannot be cast to java.lang.Long
- 微信小程序中template模板使用
- 行程码压缩算法
- Spring IoC的好处
- webuploader文件分片上传与springmvc后台合并
- android消息机制2-剖析核心类ActivityThread
- 输入两个整数a和b,及另一正整数c,计算a/b,结果精确到小数点后c位
- 最大连续子序列