无向图广度优先遍历及其matlab实现
广度优先遍历(breadth-first traverse,bfts),称作广度优先搜索(breadth first search)是连通图的一种遍历策略。之所以称作广度优先遍历是因为他的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域。
算法描述
给定图G=(V,E)。V是节点集合,E是边集合。 设定一个访问标志位vflag(i)表示节点i的访问情况,若vflag(i)=0表示节点i未被访问 vflag(i)=1表示节点i已经被访问过。 l 初始化所有节点的vflag=0。 l 从图中某个节点V0出发(该节点可以是任意的),并访问此顶点。 l 从V0出发,访问V0的各个未曾访问的邻接点(下标从小到大排列)W1,W2,…,Wk;然后,依次从W1,W2,…,Wk出发访问各自未被访问的邻接点。 l 重复上步,直到全部顶点都被访问为止。 |
For example,
fig1. 5节点无向图
假设我们先从V3 节点开始,把V3装进遍历结果队列和缓存队列。将V3访问标志位置1。取出缓存队列首位后并丢弃。这里是V3节点。找出与V3节点相邻的并未被访问过的节点有。有V1和V5节点,按下标大小我们将V1和V5分别装进缓存队列和遍历队列。自此。缓存队列是[1,5]。遍历队列是[3,1,5]。此时缓存队列没有丢空,我们继续重复之前的步骤。即取出并丢弃缓存队列队首V1。找出与V1相邻并未访问过的节点,有V2,V4.. 此时缓存队列是[5,2,4],遍历队列是[3,1,5,2,4]。此时,已经完成遍历。缓存队列还未被丢空,继续重复上述步骤。即取出并丢弃缓存队列队首V5,找出与V5相邻未被访问的节点,没有。V3相邻但是V3已被访问。此时缓存队列是[2,4],遍历队列是[3,1,5,2,4]。类似丢V2,V4直至缓存队列丢空。实际为节省程序运行时间可将遍历结束条件设为访问标志队列全部非0。
bfst matlab 代码
%==========================================================================
% 文件名: bfstdemo.m
% 版本号: 1.0.
% 作者: Le. <zoreyosa@foxmail.com>
% 单位: specter
% 修改时间: Sat Oct. ::
% 创建时间: Sat Oct. ::
%--------------------------------------------------------------------------
% blog:http://www.cnblogs.com/athlonreg
% Copyright (c) Le. All rights reserved.
%========================================================================== %% 清空环境变量
close all
clear all
clc A=[ ;
;
;
;
]; % 输入邻接矩阵
[m n]=size(A);
nodeNum=m; % 节点数
vflag=zeros(nodeNum,); % 初始化所有节点访问标志位
queue=[]; % 遍历缓存队列,每次访问并丢弃队首
result=[]; % 遍历结果
startNode=;%unidrnd(nodenum); % 从任意节点出发
queue=[queue;startNode]; % 更新遍历缓存队列
vflag(startNode)=; % 更新访问标志
result=[result;startNode]; % 更新遍历结果队列
% while isempty(queue)==false
while all(vflag)==
i=queue();
queue()=[];
for j=:n
if(A(i,j)>&&vflag(j)==&&i~=j)
queue=[queue;j];
vflag(j)=;
result=[result;j];
end
end
end
无向图广度优先遍历及其matlab实现的更多相关文章
- 算法导论—无向图的遍历(BFS+DFS,MATLAB)
华电北风吹 天津大学认知计算与应用重点实验室 最后改动日期:2015/8/22 无向图的存储方式有邻接矩阵,邻接链表,稀疏矩阵等. 无向图主要包括双方面内容,图的遍历和寻找联通分量. 一.无向图的遍历 ...
- c++ 由无向图构造邻接表,实现深度优先遍历、广度优先遍历。
/* 首先,根据用户输入的顶点总数和边数,构造无向图,然后以用户输入的顶点 为起始点,进行深度优先.广度优先搜索遍历,并输出遍历的结果. */ #include <stdlib.h> #i ...
- 图的深度优先和广度优先遍历(图以邻接表表示,由C++面向对象实现)
学习了图的深度优先和广度优先遍历,发现不管是教材还是网上,大都为C语言函数式实现,为了加深理解,我以C++面向对象的方式把图的深度优先和广度优先遍历重写了一遍. 废话不多说,直接上代码: #inclu ...
- 存储结构与邻接矩阵,深度优先和广度优先遍历及Java实现
如果看完本篇博客任有不明白的地方,可以去看一下<大话数据结构>的7.4以及7.5,讲得比较易懂,不过是用C实现 下面内容来自segmentfault 存储结构 要存储一个图,我们知道图既有 ...
- 【图的遍历】广度优先遍历(DFS)、深度优先遍历(BFS)及其应用
无向图满足约束条件的路径 •[目的]:掌握深度优先遍历算法在求解图路径搜索问题的应用 [内容]:编写一个程序,设计相关算法,从无向图G中找出满足如下条件的所有路径: (1)给定起点u和终点v. ( ...
- 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)
一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...
- 图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)
主要参考资料:数据结构(C语言版)严蔚敏 ,http://blog.chinaunix.net/uid-25324849-id-2182922.html 代码测试通过. package 图的建 ...
- 17.广度优先遍历bfs
#include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...
- 图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析
1. 深度优先遍历 深度优先遍历(Depth First Search)的主要思想是: 1.首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点: 2.当没有未访问过的顶点时,则回 ...
随机推荐
- hdu 6194 沈阳网络赛--string string string(后缀数组)
题目链接 Problem Description Uncle Mao is a wonderful ACMER. One day he met an easy problem, but Uncle M ...
- positio:absolute与position:relative的区别
absolute 能让元素 inline-block 化:例如一个div标签默认宽度是100%显示的,但是一旦被absolute属性缠上,则100%默认宽度就会变成自适应内部元素的宽度. float ...
- 打开safari开发者选项
1.点击Safari启动浏览器 2.点击左上Safari标志,选择偏好设置 3.选择高级,勾选下方的在菜单栏显示开发菜单. 如此,Safari就出现了开发菜单,右键网页元素也会出现查看元素功能了.
- zookeeper原理介绍
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt354 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它 ...
- [自制操作系统] 原子操作&核间中断&读写锁&PRWLock
本文主要为读论文Scalable Read-mostly Synchronization Using Passive Reader-Writer Locks的记录. 并将其在JOS上实现.其中包括la ...
- Android学习记录:Paint,Canvas和Bitmap
在Java中,利用过双缓冲技术,先将画笔画在内存上,再转化为图片,调出来. 当画的东西过多造成处理不过来时,双缓冲技术将防止闪屏. 在Paint方法下,我们这样写: BufferedImage tmp ...
- NHibernate教程(5)--CRUD操作
NHibernate之旅(5):探索Insert, Update, Delete操作 2008-10-17 16:31 by 李永京, 42903 阅读, 73 评论, 收藏, 编辑 本节内容 操作 ...
- 201521123100 《Java程序设计》第4周学习总结
1. 本章学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. (1)多态性:相同的形态,不同的行为 (2)类型转换与强制类型转换(cast) 2. 书面作 ...
- 201521123020《java程序设计》第1周学习总结
1.本周学习总结 1.对JAVA的历史发展的了解 2.了解Java与C/C++的区别,Java语言所写程序较为繁琐,C/C++较为简洁. 3.安装java和jdk 2.书面作业 Q1.为什么java程 ...
- 201521123036 《Java程序设计》第13周学习总结
本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 书面作业 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu.edu.cn,分 ...