//图的广度优先遍历BFS
//利用队列,从出发点将第一个顶点入队,队列不空时出队,并将该顶点所能到达的所有顶点
//入队,并在出队时访问。直至队列空
//伪代码
#include <cstdio>
#include <queue>
using namespace std;
BFS(u)
{queue< > q; //定义队列 将u入队; inq[u]=true;//设置u已加入过队列 while(q非空) {取出q的队首元素进行访问;for(从u出发可达的所有顶点v) //枚举从u能到达的所有顶点v {if(inq[v]==false)//未人过队 {将v入队;inq[v]=true; } }}
}
BFSTrave(G) //遍历图G
{for(G的所有顶点u){if(inq[u]==false)DFS(u); }
}//1、邻接矩阵版
int n,G[maxv][maxv];//n为顶点数,maxv为最大顶点数
bool inq[maxv]={false};//记录顶点v是否人过队——是否已被访问void BFS(int u)
{queue<int>q;//定义队列 q.push(u); //将u入队; inq[u]=true; //设置u已加入过队列 while(!q.empty()){int u=q.front() ;//取出q的队首元素进行访问;q.pop();for(int v=0;v<n;++v){if(inq[v]==false&&G[u][v]!=INF)//如果v未人过队且u可到达v {a.push(v);//将v入队;inq[v]=true;}}}
}
void BFSTrave()
{for(int u=0;u<n;++u){if(inq[u]==false)//如果u未曾人过队 BFS(u);//遍历u所在的连通块 }
} //2、邻接表版
vector<int> Adj[maxv];//图G,Adj[u]存放从顶点u出发可达的所有顶点
int n;
bool inq[maxv]={false};void BFS(int u)
{queue<int> q;q.push(u);inq[u]=true;while(!q.empty()){int u=q.front();q.pop();for(int i=0;i<Adj[u].size;++i){int v=Adj[i];if(inq[v]==false){q.push(v);inq[v]=true;}}} } void BFSTrave()
{for(int u=0;u<n;++u){if(inq[u]==false)//如果u未曾人过队 BFS(u);//遍历u所在的连通块 }
} //3、利用BFS求层号struct Node
{int v;//顶点编号 int layer;//层号
}vector<Node> Adj[maxv];void BFS(int s) //s为起始顶点编号
{queue <Node>q;Node start; //起始顶点 start.v=s; //起始顶点编号 start.layer=0; q.push(start);inq[start.v]=true;while(!q.empty()){Node topNode=q.front();q.pop();int u=topNode.v; //队首顶点的编号 for(int i=0;i<Adj[u].size();++i){Node next=Adj[u][i];next.layer=topNode.layer+1;if(inq[next]==false){q.push(next);inq[next.v]=true;//next的编号设为已入队 } }}
}

第十章 图(BFS基础算法)相关推荐

  1. 计算机及网络应用基础思维导图_计算机基础/算法/面试题 PDF+思维导图下载

    之前为了面试,整理了九大应付面试的思维导图 + 一份 630 页的程序员内功修炼手册 + 一份计算机基础/算法/Java技术栈/Linux C++技术栈的资料.当时我就是靠着这份思维导图以及整理的 P ...

  2. 算法基础:图的相关算法知识笔记

    一.图的相关算法 1.图的分类知识 如下图: 2.生成树概念 对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树. 连通图的生成树具有这样的特征:边的数量 = 顶点数 - ...

  3. 【BFS】魔板(c++基础算法)

    本专栏上一篇:[BFS]八数码问题(c++基础算法) 目录 一.读题 ①题面 ②题意 三.做题 ①算法原理 ②算法实现 Ⅰ三种基本操作 Ⅱ操作序列 Ⅲ输出 Ⅳ一个特殊情况 四.AC代码 最后 一.读题 ...

  4. 机器学习,深度学习基础算法原理详解(图的搜索、交叉验证、PAC框架、VC-维(持续更新))

    机器学习,深度学习基础算法原理详解(图的搜索.交叉验证.PAC框架.VC-维.支持向量机.核方法(持续更新)) 机器学习,深度学习基础算法原理详解(数据结构部分(持续更新)) 文章目录 1. 图的搜索 ...

  5. 算法导论之图的基本算法

    图是一种数据结构,有关图的算法是计算机科学中基础性的算法.这个论述恰如其分. 图的基本算法包括图的表示方法和图的搜索方法.图的搜索技术是图算法领域的核心,有序地沿着图的边访问所有顶点,可以发现图的结构 ...

  6. AcWing基础算法课Level-2 第三讲 搜索与图论

    AcWing基础算法课Level-2 第三讲 搜索与图论 DFS AcWing 842. 排列数字3379人打卡 AcWing 843. n-皇后问题3071人打卡 BFS AcWing 844. 走 ...

  7. 基础算法学习大纲(附加yxc大佬算法模板)

    基础算法学习大纲总结 学习算法路线 1.基础算法 模板 1.排序 2.二分 3.高精度 4.前缀和与差分 5.双指针算法 6.位运算 7.离散化 8.区间合并 2.数据结构 模板 1.链表与邻接链表( ...

  8. 【2022---计算机考研】数据结构之基础算法背诵版

    文章目录 一.线性表 1. 逆转顺序表中的所有元素 2. 删除线性链表中数据域为 item 的所有结点 3. 逆转线性链表 4. 复制线性链表(递归) 5. 将两个按值有序排列的非空线性链表合并为一个 ...

  9. 数据结构:图的基础知识

    文章目录 图 图论基础 图的定义 图的基本概念 图的存储结构 邻接矩阵 邻接表 图的创建和销毁* 图的遍历算法 深度优先搜索遍历(DFS) 广度优先搜索遍历(BFS) 最小生成树 Prim 算法 Kr ...

最新文章

  1. QTP---Recovery Scenario没有被触发的原因汇总
  2. 独家 | 人工神经网络中发现了人类大脑拥有的多模态神经元(附链接)
  3. 手机网页 右边的空白区
  4. Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
  5. 鲁东大学计算机王跃,鲁东大学学子在“程序设计天梯赛”中取得优异成绩
  6. 阿星Plus:基于abp vNext开源一个博客网站
  7. [精品]CSAPP Bomb Lab 解题报告(三)
  8. 升级glibc的影响_Java 11 升级:“债务”“危机”
  9. alwayson故障转移群集服务器 修改虚拟主机名及IP地址
  10. 25个深度学习开源数据集
  11. Kail Linux渗透测试教程之ARP侦查Netdiscover端口扫描Zenmap与黑暗搜索引擎Shodan
  12. Java生成随机数原理_JAVA随机数生成的机制
  13. 计数显示器c语言程序,单片机计数显示器.doc
  14. 我的编程之路点滴记录(三)
  15. Endnote X9 插入参考文献、设置参考文献格式
  16. mysql基本50题_mysql-50题
  17. Flutter中如何选择StatelessWidget和StatefulWidget
  18. python的循环语句有哪些_python的循环语句
  19. WordNet相关API介绍及语义相似度计算方法
  20. 海报设计PSD模板——抖音Glitch故障艺术风格

热门文章

  1. mes系统用什么服务器,MES系统软件对车间可视化的五大作用
  2. background图片叠加_css怎么让两个背景图片重合显示?
  3. 拼多多店铺怎么竞价折扣|四川三赢电商
  4. Navicat 无法连接MySQL数据库
  5. java 类 参数_java类类型参数
  6. SD卡?TF卡?傻傻分不清楚?
  7. 开普勒sql注入靶场学习
  8. 新手如何给Hexo博客在复制时添加版权声明
  9. javascript深入理解js闭包(摘自网络)
  10. domino服务器注册用户,Domino服务器删除用户流程