由于本人用指针,链表实现数据结构算法时经常有使用堆叠字节的警告以及栈溢出报错,于是就都用数组或者C++stl模拟了。。。

输出无向图的给定起点的先广序列。

输入格式:

输入第一行给出三个正整数,分别表示无向图的节点数N(1<N≤10)、边数M(≤50)和探索起始节点编号S(节点从1到N编号)。

随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号。

输出格式:

输出从S开始的无向图的先广搜索序列,用一个空格隔开,最后也有一个空格;如果为非连通图,再在结尾处另起一行输出一个0,表示此图非连通。

由于广度优先遍历的节点序列是不唯一的,为了使得输出具有唯一的结果,我们约定以表头插入法构造邻接表。

输入样例:

6 8 2
1 2
2 3
3 4
4 5
5 6
6 4
3 6
1 5

输出样例:

2 3 1 6 4 5 

注意题目中的以表头插入法构造邻接表

顾名思义,头插就是将新元素插在链表头部,尾插就是将新元素插在链表尾部

个人总结,他们的区别在于,如果是头插法的话,那么新元素直接作为头结点,next指针指向旧的头结点即可,非常方便迅速效率高。如果是尾插法的话,添加新元素时需要遍历旧链表,直到某个节点的next指针为空,说明这个节点是尾节点,修改这个尾节点的next指针为新添加的元素即可

具体的可以参考如下:

(188条消息) 头插法和尾插法的详细区别_史家欢yyds的博客-CSDN博客_头插法和尾插法区别

下面是正解

#include<bits/stdc++.h>
using namespace std;
#define Maxnum 12
vector <int> ALGraph[Maxnum];
int visit[Maxnum];
int vexnum, arcnum, vex, num;//图的当前点数,边数和起始点
void BFS(int vex) {cout << vex << ' ';//访问结点vexvisit[vex] = 1;//标记为访问过了num++;//计算输出的节点个数queue <int> q;//辅助队列q初始化q.push(vex);//vex进队列while (!q.empty()) {//队列非空int top = q.front();//队头元素出队并置为tq.pop();int len = ALGraph[top].size();for (int i = len - 1; i >= 0; i--) {/*for(int i=0;i<len;i++){*/if (!visit[ALGraph[top][i]])//访问top顶点尚未访问过的邻接顶点{cout << ALGraph[top][i]<<' ';visit[ALGraph[top][i]] = 1;num++;q.push(ALGraph[top][i]);}}}
}
int main() {cin >> vexnum >> arcnum >> vex;//输入图的当前点数,边数和起始点for (int k = 0; k < arcnum; k++) {//输入该条边直接连通的两个节点的编号int i, j;cin >> i >> j;ALGraph[i].push_back(j);//加入i的邻接顶点jALGraph[j].push_back(i);//加入j的邻接顶点i}BFS(vex);if (num != vexnum)cout << endl << 0;//输出结点个数不等于总结点个数,为非完全图,输出0return 0;
}

如果用邻接矩阵来实现的话,相当于用了表尾插入法,与题意是不符合的

下面是邻接矩阵实现的深度优先搜索。不过因为不符合题意,所以答案不对。但思路都是一样的

#include<bits/stdc++.h>
using namespace std;
#define Maxnum 12
//邻接矩阵法实现图的深度优先搜索,相当于以表尾插入法构造邻接表
#if 0
typedef char VerTexType;
typedef int ArcType;
typedef struct {char vexs[Maxnum];//顶点表int arcs[Maxnum][Maxnum];//邻接矩阵int vexnum, arcnum;//图的当前点数和边数
}AMGraph;
int LocateVex(AMGraph G, char u) {for (int i = 0; i < G.vexnum; i++) {if (u == G.vexs[i])return i;}return -1;
}int begin_num=0;
int visit[Maxnum];
void CreateUDN(AMGraph& G) {    cin >> G.vexnum >> G.arcnum>>begin_num;for (int k = 0; k < G.arcnum; k++) {int i, j;cin >> i >> j;//输入边直接连通的两个节点的编号G.arcs[i][j] = 1;G.arcs[j][i] = 1;}
}
void dfs(AMGraph G, int begin_num) {cout << begin_num << ' ';visit[begin_num] = true;for (int w = 1; w <= G.vexnum; w++) {if ((G.arcs[begin_num][w] == 1) && (!visit[w]))dfs(G, w);}
}
int main() {AMGraph G;CreateUDN(G);dfs(G, begin_num);return  0;
}
#endif

7-2 图的先广搜索

输出无向图的给定起点的先广序列。

输入格式:

输入第一行给出三个正整数,分别表示无向图的节点数N(1<N≤10)、边数M(≤50)和探索起始节点编号S(节点从1到N编号)。

随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个节点的编号。

输出格式:

输出从S开始的无向图的先广搜索序列,用一个空格隔开,最后也有一个空格;如果为非连通图,再在结尾处另起一行输出一个0,表示此图非连通。

由于广度优先遍历的节点序列是不唯一的,为了使得输出具有唯一的结果,我们约定以表头插入法构造邻接表。

输入样例:

6 8 2
1 2
2 3
3 4
4 5
5 6
6 4
3 6
1 5

输出样例:

2 3 1 6 4 5 

用辅助队列来实现非递归下的广度优先搜索 ,对比下图具体实现思路修改BFS代码即可

#include<bits/stdc++.h>
using namespace std;
#define MaxInt 32767
#define Maxnum 12
vector <int> ALGraph[Maxnum];
int visit[Maxnum];
int vexnum, arcnum, vex, num;//图的当前点数,边数和起始点
void BFS(int vex) {cout << vex << ' ';//访问结点vexvisit[vex] = 1;//标记为访问过了num++;//计算输出的节点个数queue <int> q;//辅助队列q初始化q.push(vex);//vex进队列while (!q.empty()) {//队列非空int top = q.front();//队头元素出队并置为tq.pop();int len = ALGraph[top].size();for (int i = len - 1; i >= 0; i--) {/*for(int i=0;i<len;i++){*/if (!visit[ALGraph[top][i]])//访问top顶点尚未访问过的邻接顶点{cout << ALGraph[top][i]<<' ';visit[ALGraph[top][i]] = 1;num++;q.push(ALGraph[top][i]);}}}
}
int main() {cin >> vexnum >> arcnum >> vex;//输入图的当前点数,边数和起始点for (int k = 0; k < arcnum; k++) {//输入该条边直接连通的两个节点的编号int i, j;cin >> i >> j;ALGraph[i].push_back(j);//加入i的邻接顶点jALGraph[j].push_back(i);//加入j的邻接顶点i}BFS(vex);if (num != vexnum)cout << endl << 0;//输出结点个数不等于总结点个数,为非完全图,输出0return 0;
}

可参考如下视频第10周14--6.5图的遍历4--广度优先搜索遍历及其实现_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1nJ411V7bd?p=125&vd_source=3bba6c1adede36ba00771e043da67d9a

7-1 图的先深搜索+7-2 图的先广搜索相关推荐

  1. 图的遍历 --- 广度优先搜索【借助队列实现】 + 深度优先搜索【借助递归栈】

    1. >>图的遍历是指从图中的某一顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问 一次且仅访问一次. 注意:树是一种特殊的图,所以树的遍历实际上也可以看作是一种特殊的图的遍历. ...

  2. 图神经网络越深,表现就一定越好吗?

    编译 | 陈彩娴 编辑 | 丛 末 转自 | AI科技评论 数十层甚至数百层神经网络的应用,是深度学习的重要标志之一.但现实情况却远非如此:比如今年被视作机器学习领域最火热的研究方向之一--图神经网络 ...

  3. 0x21.搜索 - 树与图的遍历、拓扑排序

    目录 一.树与图的深度优先遍历及树的一些性质 1.树与图的深度优先遍历 2.时间戳 3.树的DFS序(树链剖分前驱知识) 4.树的深度 5.树的重心与sizesizesize 6.图的连通块划分 二. ...

  4. 10个相似图片搜索以图找图的网站

    有没有遇到过:看到一张图片,想找到它的原始图片,或者是凭着一张小的缩略图找出原始大图?不管你有没有遇到过,反正我是遇到了.不过现在不担心了,因为下面的十款搜索引擎可以帮你实现,以图找图,以图搜图,以图 ...

  5. 广度优先搜索算法(Breath-first Search)是如何搜索一张图的?

    算法导论(MIT 6.006 第13讲) 什么是图搜索? 搜索可以理解为探索,给定一个图上的点S和A,需要找到从S到A的一个路径 图的基础概念 一个图用 G=(V,E) 表示,V是顶点的集合,E是边的 ...

  6. PaddleNLP基于ERNIR3.0文本分类以中医疗搜索检索词意图分类(KUAKE-QIC)为例【多分类(单标签)】

    相关项目链接: Paddlenlp之UIE模型实战实体抽取任务[打车数据.快递单] Paddlenlp之UIE分类模型[以情感倾向分析新闻分类为例]含智能标注方案) 应用实践:分类模型大集成者[Pad ...

  7. 图片搜索 拍立淘 按图搜索以图搜索 图搜商品 同款搜索商品

    图片搜索 拍立淘 按图搜索 以图搜图 图搜商品 同款搜索 相关资源收集 一.图片搜索介绍 图片搜索主要有以下相关应用: 1.以图搜图 以图搜图,是通过搜索图像文本或者视觉特征,为用户提供互联网上相关图 ...

  8. 如何提高百度搜索结果出图率

    一.展现样式: 二.出图改造步骤 第一步:进入搜索资源平台-->站点资源管理-->搜索结果出图. 第二步:添加JSON-LD代码,代码示例如下: <script type=" ...

  9. 搜索Gif动图API

    1 Their Products 1.1  GIPHY API GIPHY的API让开发者很容易将GIPHY庞大的库合并到他们的应用程序中. 跨所有类型的应用使用它:消息传递,聊天,约会,创建,社区等 ...

最新文章

  1. webbench网络压力测试源码
  2. 【OpenGL】用OpenGL shader实现将YUV(YUV420,YV12)转RGB-(直接调用GPU实现,纯硬件方式,效率高)...
  3. 区块链BaaS云服务(17)纸贵科技Z-BaaS“合约中心”
  4. AWS EC2启动Centos实例以及设置root密码登录
  5. vivo NEX 3 5G真机曝光:瀑布屏+升降镜头
  6. 计算机组成i1-i8,2016年软考程序员例题分析之计算机组成原理
  7. 深度学习的应用:语音识别、图像理解、自然语言处理
  8. 您试图打开的项目是WEB项目,需要通过指定其Url路径来打开它
  9. 组态软件调用matlab,()基于OPC的组态软件和MATLAB的通信实现
  10. 两步解决科来数据包生成器找不到网卡的问题
  11. SS14 SS34如何区分正负极
  12. JAVA实现腾讯企业邮箱发邮件
  13. xshell6 评估期已过 解决办法
  14. linux操作系统的7种运行级别的详细说明
  15. android判断是否安装应用程序,android如何判断一个软件是否安装以及打开手机应用商店...
  16. 2019 年天津科技大学电子设计竞赛:算法与策略-----B题
  17. vue读取文件夹下面的文件名称
  18. 计算机一级excel操作题百分比,计算机一级excel操作练习题
  19. PRML第七章稀疏核机 (RVM)
  20. 一元三次方程求解-二分

热门文章

  1. Java多线程开发——一个简单的数字加减小例子
  2. 数据库mysql性能优化-学习笔记
  3. 订阅号 openid php,微信“订阅号”如何存放openid,并在其他页面使用
  4. 微信公众平台订阅号、服务号和企业号三者之间的区别与联系
  5. 微信小程序接入易云章(H5)人脸识别 uniApp
  6. 高密度无线覆盖解决方案
  7. 英雄联盟爬取不同英雄皮肤
  8. 数据科学导论python语言实现_数据科学导论:Python语言实现(原书第2版)
  9. Vlog 是短视频发展的新催化剂?
  10. 数据库原理-几种数据模型