广度优先遍历(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实现的更多相关文章

  1. 算法导论—无向图的遍历(BFS+DFS,MATLAB)

    华电北风吹 天津大学认知计算与应用重点实验室 最后改动日期:2015/8/22 无向图的存储方式有邻接矩阵,邻接链表,稀疏矩阵等. 无向图主要包括双方面内容,图的遍历和寻找联通分量. 一.无向图的遍历 ...

  2. c++ 由无向图构造邻接表,实现深度优先遍历、广度优先遍历。

    /* 首先,根据用户输入的顶点总数和边数,构造无向图,然后以用户输入的顶点 为起始点,进行深度优先.广度优先搜索遍历,并输出遍历的结果. */ #include <stdlib.h> #i ...

  3. 图的深度优先和广度优先遍历(图以邻接表表示,由C++面向对象实现)

    学习了图的深度优先和广度优先遍历,发现不管是教材还是网上,大都为C语言函数式实现,为了加深理解,我以C++面向对象的方式把图的深度优先和广度优先遍历重写了一遍. 废话不多说,直接上代码: #inclu ...

  4. 存储结构与邻接矩阵,深度优先和广度优先遍历及Java实现

    如果看完本篇博客任有不明白的地方,可以去看一下<大话数据结构>的7.4以及7.5,讲得比较易懂,不过是用C实现 下面内容来自segmentfault 存储结构 要存储一个图,我们知道图既有 ...

  5. 【图的遍历】广度优先遍历(DFS)、深度优先遍历(BFS)及其应用

    无向图满足约束条件的路径 •[目的]:掌握深度优先遍历算法在求解图路径搜索问题的应用 [内容]:编写一个程序,设计相关算法,从无向图G中找出满足如下条件的所有路径:  (1)给定起点u和终点v.  ( ...

  6. 数据结构与算法之PHP用邻接表、邻接矩阵实现图的广度优先遍历(BFS)

    一.基本思想 1)从图中的某个顶点V出发访问并记录: 2)依次访问V的所有邻接顶点: 3)分别从这些邻接点出发,依次访问它们的未被访问过的邻接点,直到图中所有已被访问过的顶点的邻接点都被访问到. 4) ...

  7. 图的建立(邻接矩阵)+深度优先遍历+广度优先遍历+Prim算法构造最小生成树(Java语言描述)

    主要参考资料:数据结构(C语言版)严蔚敏   ,http://blog.chinaunix.net/uid-25324849-id-2182922.html   代码测试通过. package 图的建 ...

  8. 17.广度优先遍历bfs

    #include <iostream> #include <boost/config.hpp> //图(矩阵实现) #include <boost/graph/adjac ...

  9. 图的深度优先遍历(DFS)和广度优先遍历(BFS)算法分析

    1. 深度优先遍历 深度优先遍历(Depth First Search)的主要思想是: 1.首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点: 2.当没有未访问过的顶点时,则回 ...

随机推荐

  1. linux中文件I/O操作(系统I/O)

    我们都知道linux下所有设备都是以文件存在的,所以当我们需要用到这些设备的时候,首先就需要打开它们,下面我们来详细了解一下文件I/O操作. 用到的文件I/O有以下几个操作:打开文件.读文件.写文件. ...

  2. The First Article

    由于公司项目比较紧张,开始自己的博客之旅推迟了好几个月.今天终于按捺不住,申请了博客. 心中竟然有一丝丝兴奋,终于可以和众多博友们讨论分享我们一路走来的收获和感悟,记录下我们在工作中遇到和解决的问题, ...

  3. js 对于回车时间的监听,提交表单

    // ------ 监听回车事件 -----------------// document.onkeydown=keyDownSearch; function keyDownSearch(e) { / ...

  4. ADO.NET的学习

    ADO.NET的几个对象 Connection:管理数据库的连接 Command:对数据库执行命令 DataReader:数据流读取器,返回的数据都是快速的且只是"向前"的数据流. ...

  5. hdu 3062 2-Sat入门

    开始学习2-Sat,前面看了对称性解决2-sat的ppt,很有帮助. 题意:n对夫妻,夫妻需要出席一人,给出不相容的关系,求每对是否能完成出席方案. 思路:通过关系建图,Tarjan缩点,然后进行判断 ...

  6. 个人作业3-(Alpha阶段)

    一. 总结自己的alpha 过程 1.团队的整体情况 Alpha阶段初期我们团队因分工以及项目具体实施一度茫然,好在在团队队长的带领下确认分工及制定具体计划,使任务有序的进行下去,中间过程虽然遇到一些 ...

  7. 蓝桥杯PREV-11:横向打印二叉树

    嗯,没错我还报了蓝桥杯. 这是题目 问题描述 二叉树可以用于排序.其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树. 当遇到空子树时,则把该节点放 ...

  8. 201521123035《Java程序设计》第二周学习总结

    1.本周学习总结 这周学习了各种类与对象,还有基本类型的打包器,最主要的是字符串对象,老师还特地花了一节课时间讲解代码与习题. 2.书面作业 1.使用Eclipse关联jdk源代码,并查看String ...

  9. 201521123073《Java程序设计》第2周学习总结

    1. 本周学习总结 1.学习了枚举类型的应用: 枚举也可以象一般的类一样添加方法和属性,你可以为它添加静态和非静态的属性或方法,这一切都象你在一般的类中做的那样. public enum Season ...

  10. Java课程设计 - 学生基本信息管理

    团队名称.团队成员介绍(需要有照片) 团队名称:此艺兴非彼艺兴 团队成员: 王兴:女,积极上进 曾艺佳:女,积极上进 项目git地址 StudentManage项目 项目git提交记录截图(要体现出每 ...