图的广度优先搜索
来源:互联网 发布:线刷宝安全优化版 编辑:程序博客网 时间:2024/06/07 20:25
广度优先搜索(Breadth-First-Seracj)BFS,BFS是一种分层的查找过程,每向前走一步可访问一批顶点,不像深度优先搜索,它不是一个递归的算法,为了实现逐层访问,需要用到一个辅助的队列。(注:这一段话来自于书上的)
个人理解广度优先可以参考树的层次遍历,只不过树的层次非常好理解,只要画出树的结构层次也就很明显,而图的层次结构不是太明显,怎么去更好的表达还没想出太好的办法,可谓只可意会不可言传,也许深入细节后可能会有新的表达,届时再继续探讨。本次文章只探讨BFS的思想,不深入了解细节,原因是现在对图的存储结构还有点没弄透彻,等到实现的时候再做更深的阐述。废话不多说,算法描述如下:
bollean visited[max];//访问标记数组Queue Q;//用到的复制队列vexs[];//顶点数组arc[][];//边数组void BFSTraverse(Graph G){for(i=0;i<G.vexs.length;i++){visisted[i] = false;}//初始化标记数组for(i=0;i<G.vexs.legth;i++){if(!visisted[i]){BFS(G,i);}}//for}//BFSTraversevoid BFS(Graph G,int v){visit(v);visited[v] = true;Q.add(v);while(!Q.empty()){v = Q.poll();for(j=0;j<G.vexs.length;j++){if(G.arc[i][j]==1 && !visited[j]){visited[j] = true;visit(G.vexs[j]);Q.add(j);}}}//while}//BFS
需要提醒一下初学者的是:图的存储采用的邻接矩阵(共两个数组,一个vexs[]是用来存储节点的一个是arc[][]是用来存储边关系的),本人当时就是这里不太清楚导致理解算法时费了很大的功夫。
BFSTraverse比较好理解,只做了两件事情。第一初始化访问控制数组,第二就是对每个节点(未访问过的)调用BFS
BFS算法已很好理解,就是遇到一个节点,先访问然后入队,当队列不空时,出队,去访问这个节点的边关系数组arc[]i[j],注意此时i是定值,然后访问这个顶点入队。
0 0
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的 广度优先 搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的广度优先搜索
- 图的深度优先搜索和广度优先搜索模板
- 图的深度优先搜索与广度优先搜索
- 图的广度优先搜索和深度优先搜索
- 图的深度优先搜索与广度优先搜索
- Python实现ip段地址
- 在PowerDesigner中设计概念模型
- HDU-2181-哈密顿绕行世界问题
- ]MFC Tab控件最简单的实现(还能不能再简单一点!)
- libuv概览
- 图的广度优先搜索
- 关于#define与#ifndef,#ifdef等问题的理解
- Transfor.LookAt与Quaternion.LookRotation
- 常用git命令集
- 从零开始学习OpenWrt完美教程
- Python的multiprocessing连接池
- 第8周 项目3 多分段函数求值
- 第8周项目—1—分段函数求值
- /usr/bin/ld: error when run ./build.sh after compiling opencv2.4.10 on ubuntu12.04