图论1-问题 C: 算法7-6:图的遍历——广度优先搜索

news/2025/1/19 13:40:25/
题目描述
广度优先搜索遍历类似于树的按层次遍历的过程。其过程为:假设从图中的某顶点v出发,在访问了v之后依次访问v的各个未曾被访问过的邻接点,然后分别从这些邻接点出发依次访问它们的邻接点,并使“先被访问的顶点的邻接点”先于“后被访问的顶点的邻接点”被访问,直至图中所有已被访问的顶点的邻接点都被访问到。若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作为起始点。重复上述过程,直至图中所有顶点都被访问到为止。
算法可以描述如下:

在本题中,读入一个无向图的邻接矩阵(即数组表示),建立无向图并按照以上描述中的算法遍历所有顶点,输出遍历顶点的顺序。

输入
输入的第一行包含一个正整数n,表示图中共有n个顶点。其中n不超过50。
以后的n行中每行有n个用空格隔开的整数0或1,对于第i行的第j个0或1,1表示第i个顶点和第j个顶点有直接连接,0表示没有直接连接。当i和j相等的时候,保证对应的整数为0。
输入保证邻接矩阵为对称矩阵,即输入的图一定是无向图。
输出
只有一行,包含n个整数,表示按照题目描述中的广度优先遍历算法遍历整个图的访问顶点顺序。每个整数后输出一个空格,并请注意行尾输出换行。
样例输入 复制
4 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 0 
样例输出 复制
0 3 1 2 
提示
在本题中,需要熟练掌握图的邻接矩阵存储方式。在建立完成无向图之后,需要严格按照题目描述的遍历顺序对图进行遍历。另外,算法中描述的FirstAdjVex函数和NextAdjVex函数,需要认真的自行探索并完成。在本题中需要使用队列结构,需要对队列的概念进行复习。
通过这道题目,应该能够对图的广度优先搜索建立更加直观和清晰的概念.
题解
t
tii
#include<bits/stdc++.h>
using namespace std;
using ll = long long;const int N = 105;int mp[N][N];int n;bool vis[N];void dfs(int u){cout << u << ' ';vis[u] = true;for(int i = 0;i < n;i ++){if(mp[u][i] == 1 && !vis[i]){dfs(i);}}
}
void bfs(int u){queue<int>q;q.push(u);while(!q.empty()){int cu = q.front();q.pop();cout << cu << ' ';vis[cu] = true;for(int i = 0;i < n;i ++){if(mp[cu][i] == 1 && !vis[i]){vis[i] = true;q.push(i);}      }}
}int main(){ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n;for(int i = 0;i < n;i ++)for(int j = 0;j < n;j ++)cin >> mp[i][j];bfs(0);return 0;
}


http://www.ppmy.cn/news/1564425.html

相关文章

【Linux】线程与同步互斥相关知识详细梳理

目录 1. 线程概念 2. 线程优势 3. 线程劣势 4. 线程控制 4.1 POSIX线程库 4.2 线程操作 5. 线程互斥 5.1 互斥相关概念 5.2 互斥量mutex 5.3 互斥量实现原理 6. 线程同步 6.1 同步概念与竞态条件 6.2 条件变量 6.3 条件变量使用规范及细节 1. 线程概念 什么是…

Linux《Linux简介与环境的搭建》

在学习了C或者是C语言的基础知识之后就可以开始Linux的学习了&#xff0c;现在Linux无论是在服务器领域还是在桌面领域都被广泛的使用&#xff0c;所以Linxu也是我们学习编程的重要环节&#xff0c;在此接下来我们将会花大量的时间在Linxu的学习上。在学习Linux初期你可以会像初…

【设计模式-结构型】代理模式

一、什么是代理模式 在港片中&#xff0c;经常能看到一些酷炫的大哥被警察抓了&#xff0c;警察会试图从他们口中套出一些关键信息。但这些大哥们通常会非常冷静地回应&#xff1a;“我有权保持沉默&#xff0c;我要找我的律师。” 这个律师就像是大哥的“法律盾牌”&#xff…

iOS - 关联对象的实现

根据源码总结一下关联对象(Associated Objects)的实现&#xff1a; 1. 关联对象的基本结构 // 对象的 isa 结构中包含关联对象标记 union isa_t {struct {uintptr_t nonpointer : 1; // 是否使用优化的 isauintptr_t has_assoc : 1; // 是否有关联对象// ...其他位…

掌握 React 高阶组件与高阶函数:构建可复用组件的新境界

一、引言 在 React 开发中&#xff0c;代码复用性和逻辑分离是提高开发效率和维护性的重要手段。高阶组件&#xff08;Higher-Order Component, HOC&#xff09;和高阶函数&#xff08;Higher-Order Function, HOF&#xff09;是实现这一目标的两种强大工具。本文将详细介绍这…

隧道IP广播与紧急电话系统:提升隧道安全的关键技术

隧道IP广播与紧急电话系统&#xff1a;提升隧道安全的关键技术 随着现代城市交通的迅猛发展&#xff0c;隧道作为重要的交通基础设施&#xff0c;其安全性与应急处理能力显得尤为重要。隧道IP广播与紧急电话系统作为保障隧道安全的关键技术&#xff0c;正发挥着越来越重要的作…

HarmonyOS使用Grid网格实现计算器功能实现

使用Grid网格处理&#xff0c;实现了计算器的加减乘除功能 Entry Component struct GridPage {State str: string ""; //暂存区State num: string "0"; //输入区State flagNum: boolean false; //标识build() {Column() {Grid() {GridItem() {Text(this…

WPS excel使用宏编辑器合并 Sheet工作表

使用excel自带的工具合并Sheet表&#xff0c;我们会发现需要开通WPS会员才能使用合并功能&#xff1b; 那么WPS excel如何使用宏编辑器进行合并 Sheet表呢&#xff1f; 1、首先我们要看excel后缀是 .xlsx 还是 .xls &#xff1b;如果是.xlsx 那么 我们需要修改为 .xls 注…