第十二周项目三 图遍历算法实现——广度优先(BFS)遍历

C++图遍历算法的实现:深度优先与广度优先 🏆本文收录于「编程与技术实战」专栏,此专栏涵盖了C/C++编程、人工智能、数据结构、机器学习等技术领域的内容,助你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!! 阅读详情

问题及代码:

/*     
*烟台大学计算机与控制工程学院      
*作    者:孙丽玮    
*完成日期:2016年11月17日  
*问题描述:利用图算法库实现广度优先(BFS)遍历
*/ 
1、graph.h的代码(见图基本算法库)
2、graph.cpp的代码(见图基本算法库)

3、main.cpp的代码

#include <stdio.h>
#include <malloc.h>
#include "graph.h"

void BFS(ALGraph *G, int v)
{
    ArcNode *p;
    int w,i;
    int queue[MAXV],front=0,rear=0; //定义循环队列
    int visited[MAXV];     //定义存放节点的访问标志的数组
    for (i=0; i<G->n; i++) visited[i]=0; //访问标志数组初始化
    printf("%2d",v);            //输出被访问顶点的编号
    visited[v]=1;                       //置已访问标记
    rear=(rear+1)%MAXV;
    queue[rear]=v;              //v进队
    while (front!=rear)         //若队列不空时循环
    {
        front=(front+1)%MAXV;
        w=queue[front];             //出队并赋给w
        p=G->adjlist[w].firstarc;   //找w的第一个的邻接点
        while (p!=NULL)
        {
            if (visited[p->adjvex]==0)
            {
                printf("%2d",p->adjvex); //访问之
                visited[p->adjvex]=1;
                rear=(rear+1)%MAXV; //该顶点进队
                queue[rear]=p->adjvex;
            }
            p=p->nextarc;       //找下一个邻接顶点
        }
    }
    printf("\n");
}

int main()
{
    ALGraph *G;
    int A[6][6]=
    {
        {0,1,1,1,0,0},  
        {1,0,1,0,1,0},  
        {1,1,0,0,0,1},  
        {1,0,0,0,0,1},  
        {0,1,0,0,0,1},  
        {0,0,1,1,1,0}
    };
    ArrayToList(A[0], 6, G);

    printf(" 由2开始广度遍历:");
    BFS(G, 2);

    printf(" 由0开始广度遍历:");
    BFS(G, 0);
    return 0;
}

运行结果:


总结:

图的广度优先遍历。

图(Graph)——图的遍历算法 记录图的两种遍历算法,到时候会补充图的其他各种算法。 阅读详情

相关推荐

数据结构-图【广度优先遍历图解&C++代码实现】

    关于图的广度优先遍历(Breadth-First-Search,BFS)算法,具体原理在此不做阐述,仅是将该算法以流程图解形式给出,并结合算法原理给出C++的代码实现。 图解BFS & C++代码实现1 BFS算法图解1.1 基本算法流程伪代码1.2 算法流程图解2 代码实现2.1 宏定义与头文件包含2.2 边表类-ArcNode2.3 顶点类-VNode2.4 邻接表类-ALGraph3 代码测试附:队列定义-LinkedQueue 1 BFS算法图

席木木的博客 1264

数据结构(C实现)------- 图的广度优先遍历

[本文是自己学习所做笔记,欢迎转载,但请注明出处:http://blog.youkuaiyun.com/jesson20121020] 算法描述:           设图G的初始状态是所有顶点均未被访问过,在G中的任选一顶点vi为初始出发点,则广度优先遍历 可定义如下:首先,访问初始出发点vi,接着依次访问vi的所有邻接点w1,w2,...,wk;然后,依次访问w1,w2,...,wk 的邻接的

jesson20121020的专栏 1854

BFS 广度优先搜索算法 matlab

本程序实现了对一颗树的广度优先搜索,通过本程序还可以判断图的连通性

C++图的广度优先遍历算法

图的结构 算法实现 #include <iostream> using namespace std; #define MaxSize 15 //定义顶点和边类型 typedef int VertexType; typedef int EdgeType; //定义顶点数和边数 #define vNums 7 #define eNums 7 //顶点是否被访问 bool visited...

敢于知道, 2371

图的深度优先遍历与广度优先遍历(C语言实现)

数据结构中的图结构,其中最重要的两个遍历算法——深度优先遍历与广度优先遍历

广度优先查找 BFS

对摔跤手分类,分为优秀摔跤手和非优秀摔跤手,优秀只能和非优秀的进行比赛,如果用点表示摔跤手,用线表示比赛,就构成了一个图。通过BFS算法,判断其是否为偶图 数据结构为邻接表 在c-free和vc下都可运行

【算法设计】用C++类和队列实现图搜索的广度优先遍历算法

🎉我的世界没有陌生人,只有不问远近的缘分🎉 🎉写在前面 算法课老师讲了用C++类和队列数组的知识实现bfs算法,我结合自己的理解,画了示意图并做出了改进,现在分享给大家,绝对每一个点都照顾到,让大家稍微动脑筋就能理解这个算法,那么广度优先遍历现在开始。 广度优先遍历概念 求解节点间的最短路径,因为它的特点是 "搜到就是最优解"。 定义: 广度优先搜索(Breadth-First Search),又称作宽度优先搜索。BFS是一种完备策略,即只要问题有解,它就一定可以找到解。并且

叶落秋白的博客 2952

图的深度广度优先算法

本演示程序中,要求以邻接表作为图的存储结构。图中顶点数据类型为字符型,在提示信息下由用户输入。边的信息由用户输入弧头和弧尾元素。<br><br><br>为实现上述程序功能,以线性链表表示集合。为此,需要两个抽象数据类型:线性表和集合。<br>1. 线性表的抽象数据类型定义为:<br> ADT ALGraph{<br> 数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。<br> 数据关系R1:R={VR}<br>VR={<v,w>|v,w V且P(v,w),<v,w>表示从v到w的弧,为此P(v,w)定义了弧<v,w> 的意义或信息}<br> 基本操作P: <br>void CreateAdjList(ALGraph& G)<br> 操作结果:根据相应的提示信息构造一个图。<br> int LocateVex(&G,char u)<br> 初始条件:图G存在,u和G中顶点有相同特征。<br> 操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回-1。<br>int FirstAdjVex(ALGraph G,int v)<br> 初始条件:图G存在,v是G中某个顶点。<br> 操作结果:返回v第一个邻接顶点。若v在G中没有邻接顶点,返回-1。<br>int NextAdjVex(ALGraph G,int v,int w)<br> 初始条件:图G存在,v是G中某个顶点,w是v的邻接顶点。<br> 操作结果:返回v的(相对于w的)第一个邻接顶点。若不存在,返回-1。<br>void DFS(ALGraph &G,int v)<br> 初始条件:图G存在。<br> 操作结果:从顶点v出发,对图进行深度优先遍历。<br>void DFSTraverse(ALGraph *G)<br> 初始条件:图G存在。<br> 操作结果:对图进行深度优先遍历。<br>void BFSTraverse(ALGraph *G)<br> 初始条件:图G存在。<br> 操作结果:对图进行广度优先遍历。<br> }ADT ALGraph<br>2. 队列的抽象数据类型定义为:<br> ADT Queue{<br> 数据对象D:D={ | QNodeSet,i=1,2,…,n,n 0 }<br> 数据关系R2:R2={< , >| , D1, i=2,…,n}<br> 约定其中 端为队列头, 为队列尾<br> 基本操作P:<br> InitQueue (*Q)<br> 操作结果:构造一个空队列Q<br> EnQueue (*Q,e)<br> 初始条件:队列Q已存在<br> 操作结果:插入元素e为Q的新的队尾元素<br> DeQueue (*Q)<br> 初始条件:Q为非空队列<br> 操作结果:删除Q的队头元素,并返回其值<br> QueueEmpty (*Q)<br> 操作结果:队为空,则返回0;否则,返回1<br> }ADT Queue<br><br><br>图的基本操作设置如下:<br>void CreateAdjList(ALGraph& G) //构建图<br>int LocateVex(ALGraph &G,char u) //返回u在G中的位置<br>int FirstAdjVex(ALGraph G,int v) //返回v的第一个邻接节点<br>int NextAdjVex(ALGraph G,int v,int w) //返回v的相对w的下一个邻接节点<br>void DFS(ALGraph &G,int v) //从顶点v开始深度优先遍历图<br>void DFSTraverse(ALGraph *G) //深度优先遍历图<br>void BFSTraverse(ALGraph *G) //广度优先遍历图<br><br>队列的基本操作设置如下:(具体操作上一次上机题中已经涉及,故此处不再详述)<br>void InitQueue(LinkQueue &Q) <br>void EnQueue(LinkQueue& Q,int e)<br>int DeQueue( LinkQueue& Q)<br>int QueueEmpty(Queue *Q)<br><br>

邻接矩阵有向图

和无向图的非常相似,只是反向不记录为1而已 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;malloc.h&gt; #include &lt;string.h&gt; #define MAX 100 #define isLetter(a) ((((a)&gt;='a')&amp;&amp;((a)&lt;='...

Geek 6724

手把手教你用闲置安卓手机搭建个人收款系统(蓝鲸支付私有化部署实战)

本文详细介绍了如何利用闲置安卓手机搭建个人收款系统,实现私有化支付部署。通过开源技术栈和容器化方案,零成本构建安全、高效的支付网关,解决传统支付平台的数据安全和资金风险问题。特别适合个人开发者和小微企业主,无需复杂审批,资金实时到账,显著降低运营成本。

weixin_30363285的博客 380

Linux 之 supervisor安装和使用

运行Supervisor的后台服务,它用来启动和管理那些你需要Supervisor管理的子进程,响应客户端发来的请求,重启意外退出的子进程,将子进程的stdout和stderr写入日志,响应事件等。它是Supervisor最核心的部分。

chang995196962的博客 5545

实现图的遍历算法

实现图的遍历算法 领会图的两种遍历,深度优先算法和广度优先算法。 输出: (1)输出有向图G从顶点0开始的深度优先遍历序列(递归算法)。 (2)输出有向图G从顶点0开始的深度优先遍历序列(非递归算法)。 (3)输出有向图G从顶点0开始的广度优先遍历序列。 设备: 计算机,VC6.0 注意点: (1)图的深度优先递归算法 void DFS(AdjGraph *G,int v) { Arc...

Ithaca_farmer的农田 7233

Win64 驱动内核编程-16.WFP网络监控驱动(防火墙)

WFP驱动监控网络 WFP是微软推出来替代TDIHOOK、NDISHOOK等拦截网络通信的方案,WFP的框架非常庞大,在RING3和RING0各有一套类似的函数,令人兴奋的是,即使在R3使用WFP,也可以做到全局拦截访问网络。由于WFP的范围太广,实在难以一言概括,感...

墨鱼菜鸡 1033

【经典算法实现 32】图的遍历 --- 广度优先遍历算法

【经典算法实现 31】图的遍历 --- 广度优先遍历算法一、 广度优先遍历算法1.1 实现思路1.2 广度优先遍历算法代码实现二、完整代码2.1 运行结果 本文接着 《【经典算法实现 30】图的创建 — 十字链表法》, 《【经典算法实现 31】图的遍历 — 深度优先遍历算法》 本文,我们来实现图的广度优先遍历算法。 先上图 一、 广度优先遍历算法 深度优先遍历算法 与 广度优先遍历算法 最大的区别在于, 深度优先遍历算法 使用的栈,后进先出 广度优先遍历算法 使用的是队列,先进先出 1.1 实现

|~~~热爱生活、努力学习的小伙汁~~~| 3395

【零基础教程】HEC-RAS 1D/2D全流程模拟指南|从水动力到水质建模一次搞定!

HEC-RAS由美国陆军工程兵团水文研究中心研制,具有完整的一二维耦合的水动力及水环境模拟功能,也具有闸、涵洞、桥梁以及泵站等水利构筑物的模拟能力;同时也可以与HEC研制的水文模型(HMS)、洪水淹没风险和损失分析软件(FDA)等耦合,是免费软件中使用最方便、应用最广泛的软件之一。2.HEC-RAS与HEC-HMS的耦合(不详细讲HEC-HMS)3.淹没风险分析软件HEC-FDA与HEC-RAS耦合。案例十八:HEC-RAS与HEC-HMS的耦合。案例十九:HEC-RAS与HEC-FDA的耦合。

weixin_48230888的博客 872

纯相位全息图优化算法综述

除此之外,还有许多用于减少斑点噪声的非迭代方法,例如:采用下采样掩膜的采样纯相位全息图(Sampled-Phase-only Hologram)方法、模式化相位掩膜(Patterned Phase-Only Hologram)方法、双相位方法(Double-Phase Method),以及使用非随机相位掩膜的方法(Random Phase-Free Method)等。迭代算法通常由一个对目标全息图的近似出发,经过一系列的重复操作不断优化这个近似全息图,直到该近似所得到的重建图像满足一定的误差要求;

ZhongKeWeiXing的博客 1428

图的遍历算法操作

1.深度优先搜索遍历 图的深度优先搜索遍历(DFS)类似于二叉树的先序遍历。它的基本思想: 首先访问出发点V,并将其标记为已访问过;然后选取与V邻接的未被访问的任意一个顶点W,并访问它;在选取与W邻接的未被访问的任一顶点并访问,依次重复进行。当一个顶点的所有邻接顶点都被访问过时,则依次退回到最近被访问过的顶点,若该顶点还有其他邻接顶点未被访问,则从这些未被访问的顶点中取一个重复上述的访问过程,直至...

大鹏视界U 1660

STM32F103C8T6+I2C+DMA读取陀螺仪模块JY901S(硬件I2C

说明:1.本实验代码适用移植一切stm32f1系列;2.本实验使用的是外设资源硬件I2C2;3.本实验运用的是DMA单次模式,如果需要DMA的循环模式,请移步我的另一篇文章;4.本文章不提供陀螺仪校准教学,并是在没有校准陀螺仪情况下读取数据;5.本文章是作者的学习记录及心得,如有不足,欢迎指正。 总结:亲测stm32f103c8t6最小系统板通过片上外设资源I2C配合DMA读去陀螺仪模块jy901s偏航角有效。

anquanyuanqqadsy的博客 6172

图的遍历算法DFS和BFS(C++)

图的遍历算法程序(C++实现) //图的遍历是指按某条搜索路径访问图中每个结点,使得每个结点均被访问一次,而且仅被访问一次。图的遍历有深度遍历算法和广度遍历算法,程序如下: #include //#include #define INFINITY 32767 #define MAX_VEX 20 //最大顶点个数 #define QUEUE_SIZE (MAX_VEX

YANG TAO 1万+

【CubeMX】STM32G474 HRTIM 死区时间与互补PWM实战解析

本文深入解析STM32G474的HRTIM高分辨率定时器在互补PWM生成与死区时间配置中的应用。通过CubeMX工具详细演示时钟配置、单路PWM基础、互补输出与死区时间设置,并结合逆变器等电力电子实战案例,帮助开发者避免直通风险,优化系统性能。

efc12345678的博客 746

YOLOv11 改进 - 注意力机制 | Deformable-LKA 可变形大核注意力:自适应采样网格优化特征捕捉,提升不规则目标感知

本文介绍了可变形大核注意力(D-LKA Attention)及其在YOLOv11中的结合。D-LKA Attention是一种简化的注意力机制,采用大卷积核利用体积上下文信息,通过可变形卷积灵活调整采样网格,适应多样数据模式。它有2D和3D版本,3D版本在跨深度数据理解上表现出色,共同构成了D-LKA Net架构。我们将D-LKA Attention集成进YOLOv11,在模型的检测头部分引入deformable_LKA_Attention模块。实验表明,该方法在分割任务上表现优于现有方法,提升了模型的检测

魔改工程师的博客 1170

图的遍历算法之广度优先遍历(BFS)(C++)

广度优先遍历的算法实现

smart_jackli的博客 6567

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

第十二周 项目3-图遍历算法实现 (2)广度优先遍历(BFS)

/* Copyright (c)2016,烟台大学计算机与控制工程学院 All rights reserved. 文件名称:第十二周项目3 - 图遍历算法实现 (2)广度优先遍历(BFS).cpp 作 者:滕健 完成日期:2016年11月17日 * 问题描述:实现图遍历算法,分别输出如下图结构的深度优先(DFS)遍历序列和广度优先遍历(BFS)序列。 *

滕健的博客 495

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

图的广度优先遍历算法

前言广度优先遍历算法是图的另一种基本遍历算法,其基本思想是尽最大程度辐射能够覆盖的节点,并对其进行访问。以迷宫为例,深度优先搜索更像是一个人在走迷宫,遇到没有走过就标记,遇到走过就退一步重新走;而广度优先搜索则可以想象成一组人一起朝不同的方向走迷宫,当出现新的未走过的路的时候,可以理解成一个人有分身术,继续从不同的方向走,,当相遇的时候则是合二为一(好吧,有点扯了)。广度优先遍历算法的遍历过程仍然以

rhwayfun专栏 4037

无向连通图的广度优先遍历算法

图的广度优先算法是图的基本算法,也是最小生成树以及单源最短路径算法的基础。最近把广度优先遍历算法实现了一下,希望能够有比以前更深的体会或者加强一下对该算法的理解。前些天看了优米网上关于于丹做客在路上的一段视频,有一点心得体会。我很赞同于丹的观点,一个人的见识是十分重要的,所谓见识,从某一方面来理解,那就是要亲历亲为。对于算法这一门数学与编程并重的学科更是如此。     任何一种算法,都需要搞清楚

wolenski的专栏 5282

图的遍历算法

理解并实现深度优先搜索(DFS)和广度优先搜索(BFS)算法。通过DFS和BFS判断图的连通性,并应用这些算法在实际场景中的问题,如网络搜索、社交网络分析等。掌握图的连通性定义,并能够计算图的连通分量。这些内容帮助学生掌握图的遍历算法的应用,并能够通过编程实现它们解决实际问题。

Major_S的博客 1021
上一篇: 第十二周项目三 图遍历算法实现——深度优先(DFS)遍历
下一篇: 第十二周项目四 利用遍历思想求解图问题(1、2)
MF-Bee
博客等级 码龄10年 25粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值