数据结构---邻接表的BFS


数据结构—邻接表的BFS


原理:参考趣学数据结构

代码:

队列代码:

#pragma once
#define elemType int
#define N 100
#include<stdlib.h>
typedef struct dQueue {int data;struct dQueue* next;
}dQueue;
typedef struct queue {dQueue *front, *rear;
}queue;
bool initQueue(queue &Queue) {//初始化队列//Queue.front = new dQueue;Queue.front = Queue.rear = (dQueue*)malloc(sizeof(dQueue));if (!Queue.front) {return false;}Queue.front->next = NULL;//头结点return true;
}
int getQueueTopElem(queue &Queue) {//获取队列队头的元素int u = -1;if (Queue.front != Queue.rear) {dQueue* p = Queue.front->next;u = p->data;}return u;
}
bool enQueue(queue &Queue, int e) {//入队dQueue* p = Queue.rear;dQueue* s = (dQueue*)malloc(sizeof(dQueue));s->data = e;s->next = NULL;p->next = s;Queue.rear = s;return true;
}
bool deQueue(queue &Queue, int &e) {//出队if (Queue.front == Queue.rear) {return false;//空队}dQueue* p = Queue.front->next;e = p->data;Queue.front->next = p->next;if (p == Queue.rear) {//队尾只有一个元素的时候Queue.rear = Queue.front;}delete p;return true;
}
bool emptyQueue(queue Queue) {//队列为空的判断if (Queue.front == Queue.rear) {return true;}return false;
}

BFS代码:

#include<stdio.h>
#include<stdlib.h>
#include"queue.h"
#define typeNode int //每个头结点的标识数据类型
#define N 100 //最大结点数
int degree[N];
int result[N];
bool visited[N];
typedef struct dNode {//每个头结点后紧跟的单位结点int data;struct dNode * next;
}dNode;
typedef struct mNode {//邻接表中每一行的头结点typeNode data;dNode * first;//指向第一个有效的后继结点
}mNode;
typedef struct {mNode vNode[N];//所有头结点int vNum, eNum;//图中顶点的数量和边数量
}zNode;
void init(zNode &ZNode) {printf("规定顶点从0开始取\n");scanf_s("%d%d", &ZNode.vNum, &ZNode.eNum);//输入有向图的顶点数和边数for (int i = 0; i < ZNode.vNum; i++) {//规定顶点从0开始取scanf_s("%d", &ZNode.vNode[i].data);ZNode.vNode[i].first = NULL;}for (int i = 0; i < ZNode.eNum; i++) {//头插法int u, v;scanf_s("%d%d", &u, &v);//u顶点到v顶点有边dNode* p = new dNode();p->data = v;p->next = ZNode.vNode[u].first;//只有指针域,指向地址ZNode.vNode[u].first= p;}
}
void print14(zNode ZNode) {printf("遍历链表:\n");for (int i = 0; i < ZNode.vNum; i++) {dNode* temp = ZNode.vNode[i].first;printf("%d ->", ZNode.vNode[i].data);while(temp){printf("%d ->",temp->data);temp = temp->next;}printf("NULL\n");}
}
void BFSLinkGraph(zNode ZNode, int u) {//邻接表的DFSqueue Queue;initQueue(Queue);visited[u] = true;enQueue(Queue, u);while (!emptyQueue(Queue)) {u = getQueueTopElem(Queue);printf("%d ", u);int e = -1;deQueue(Queue, e);dNode* p=ZNode.vNode[u].first;while (p) {int i = p->data;if (!visited[i]) {visited[i] = true;enQueue(Queue, i);}p = p->next;}}
}
int main() {zNode ZNode;printf("邻接表的构造:\n");init(ZNode);print14(ZNode);for (int i = 0; i < ZNode.vNum; i++) {visited[i] = false;}printf("BFS遍历邻接表\n");BFSLinkGraph(ZNode, 0);printf("\n");system("pause");return 0;
}

测试截图:

请添加图片描述

时间复杂度为O(n+e),空间复杂度为O(n)

如果存在什么问题,欢迎批评指正!谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华硕主板开机只进入Bios模式不进入Windows系统

华硕电脑进入bios界面解决办法 1.可以按平常方法多重启几下&#xff08;bios界面按f10确认保存&#xff09; 2.是固态硬盘的地方看看是否有松动 插回去就可以了3.图形界面bios先按f7进入高级模式&#xff0c;【security】菜单&#xff0c;通过方向键选择【secure Boot】选项&am…

abp vnext2.0核心组件之.Net Core默认DI组件切换到AutoFac源码解析

老版Abp对Castle的严重依赖在vnext中已经得到了解决,vnext中DI容器可以任意更换,为了实现这个功能,底层架构相较于老版abp,可以说是进行了高度重构.当然这得益于.Net Core的DI容器组件本身的优势.接着abp vnext2.0核心组件之模块加载组件源码解析 上文,上文中我跳过了DI切换这个…

安卓listview下拉刷新_安卓QQ内测教学,保证不让你走弯路

本文章为安卓QQ内测资格获取教程&#xff0c;仅针对安卓用户&#xff0c;苹果手机我暂无渠道。安卓QQ用户不可直接安装测试版QQ&#xff0c;否则会被强制退出&#xff0c;也无法回退旧版本&#xff0c;只能卸载重新安装旧版本。切记&#xff0c;切记&#xff0c;一定现申请资格…

数据结构---prim最小生成树

数据结构—prim最小生成树 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define N 100 #define elemType int //const int MAX_INT (1 << 31) - 1; //const int MAX_INT 0X7fffffff; #define INF (((…

c++中计算2得n次方_七上,一元一次方程,知识点综合学霸笔记在手

一元一次方程的解定义&#xff1a;使一元一次方程左右两边相等的未知数的值叫做一元一次方程的解&#xff0e;把方程的解代入原方程&#xff0c;等式左右两边相等&#xff0e;解一元一次方程(1)解一元一次方程的一般步骤&#xff1a;去分母、去括号、移项、合并同类项、系数化为…

abp vnext2.0核心组件之DDD组件之实体结构源码解析

接着abp vnext2.0核心组件之模块加载组件源码解析和abp vnext2.0核心组件之.Net Core默认DI组件切换到AutoFac源码解析集合.Net Core3.1,基本环境已经完备,接下去就是构建领域层,vnext整个领域层大致分为聚合根、实体、值对象、事件实体、仓储、服务等等,内容较多,所以我打算分…

[蓝桥杯2017初赛]方格分割-dfs+思维

解题思路&#xff1a; 这是大佬的思路&#xff1a; 这道题可能上来会想到搜格子&#xff0c;但搜格子意味着更高的复杂度以及判连通的需要&#xff0c;本题似乎搜索要切开的边更优。由题意&#xff0c;这一条切割线必定经过图的中心点&#xff0c;那么我们一旦确定了半条到达边…

数据结构---Kruskal最小生成树

数据结构—Kruskal最小生成树 原理&#xff1a;参考趣学数据结构 代码&#xff1a; 快速排序&#xff1a; #pragma once #define elemType int typedef struct vER {elemType u;elemType v;int weight; }VER; int quickSort(VER a[], int l, int h) {//快速排序int i l, j…

电脑打字手指正确姿势_写字坐姿不正确的难题,已被家长攻克,果然高手在民间...

全文1000字&#xff0c;预计阅读需7分钟​进入小学&#xff0c;老师会教一年级学生如何坐正&#xff0c;如何正确拿笔&#xff0c;但由于学生人数较多&#xff0c;加之学习课本知识等&#xff0c;老师很难将每一个学生的坐姿都教得很好。什么样的坐姿才是正确的&#xff1f;怎样…

云原生 - Istio可观察性之监控(四)

作者&#xff1a;justmine头条号&#xff1a;大数据与云原生微信公众号&#xff1a;大数据与云原生创作不易&#xff0c;在满足创作共用版权协议的基础上可以转载&#xff0c;但请以超链接形式注明出处。为了方便阅读&#xff0c;微信公众号已按分类排版&#xff0c;后续的文章…

word List 09

word List 09 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢

phpword 模板 多页_高中数学:各题型答题模板,吃透,灵活运用数学公式,解题更快!...

暑假已经接近尾声&#xff0c;部分地区已经开学了。最近有同学留言说&#xff0c;高三了&#xff0c;数学成绩很不好&#xff0c;该怎么办&#xff1f;数学拉分很多。针对高三复习&#xff0c;大家一定要注意题型的积累&#xff0c;每个题型都是有相应的答题模板&#xff0c;积…

使用.NET Core优雅获取并展示最新疫情数据

前言新型冠状病毒的出现&#xff0c;着实让人紧张。我每天一大早都会去查看今天的最新数据&#xff0c;可是每次的数据都挺让人揪心的。今天突然间很想看看过去的历史的数据&#xff0c;结果查了很多资料都不是很全。反正国家让我们待在家里做贡献&#xff0c;那我们也可以多做…

linux源码_从linux源码看epoll及epoll实战揭秘

从linux源码看epoll前言在linux的高性能网络编程中&#xff0c;绕不开的就是epoll。和select、poll等系统调用相比,epoll在需要监视大量文件描述符并且其中只有少数活跃的时候&#xff0c;表现出无可比拟的优势。epoll能让内核记住所关注的描述符&#xff0c;并在对应的描述符事…

《ASP.NET Core 微服务实战》-- 读书笔记(第9章)

第 9 章 微服务系统的配置微服务系统中的配置需要关注更多其他方面的因素&#xff0c;包括&#xff1a;配置值的安全读写值变更的审计能力配置信息源本身的韧性和可靠性少量的环境变量难以承载大型、复杂的配置信息应用要决定是否支持配置值的在线更新和实时变更&#xff0c;还…

数据结构---简单插入排序

数据结构—简单插入排序 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> void simpleInsertSort(int a[], int length) {//简单插入排序int j;for (int i 2; i < length; i) {//从第二个元素开始比较插入if (a[i]…

[蓝桥杯2018初赛]小朋友崇拜圈

题目描述 班里N个小朋友&#xff0c;每个人都有自己最崇拜的一个小朋友&#xff08;也可以是自己&#xff09;。 在一个游戏中&#xff0c;需要小朋友坐一个圈&#xff0c; 每个小朋友都有自己最崇拜的小朋友在他的右手边。 求满足条件的圈最大多少人&#xff1f; 小朋友编号为…

前端 JS/TS 调用 ASP.NET Core gRPC-Web

前言在上两篇文章中&#xff0c;介绍了ASP.NET Core 中的 gRPC-Web 实现 和 在 Blazor WebAssembly 中使用 gRPC-Web&#xff0c;实现了 Blazor WebAssembly 调用 ASP.NET Core gRPC-Web。虽然 ASP.NET Core 中的 gRPC-Web 实现目前还是试验性项目&#xff0c;但是鉴于它在生态…

数据结构---哈夫曼树

数据结构—哈夫曼树 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define N 100 #define INF 2^31-1 typedef struct fNode {//哈夫曼树中每个节点的信息int c;//字符int parent;//父节点&#xff0c;左右孩子&am…

热电偶校验仪_热电偶校验方法_烟台一等热电偶,干湿两用温度校验炉公司

杭州中创为您详细解读hzzc6烟台一等热电偶的相关知识与详情&#xff0c;防爆涡轮流量计的转速通过拆正在机壳外的传感线圈来检测&#xff0e;当涡轮流量计叶片切割由壳体内**磁钢发生的磁力线时&#xff0c;就会引起传感线圈中的磁通变革&#xff0e;传感线圈将检测到的磁通周期…