F : DS图遍历--广度优先搜索

news2024/10/7 7:33:24

Description

给出一个图的邻接矩阵,对图进行广度优先搜索,从顶点0开始

注意:图n个顶点编号从0到n-1

如果图不连通,则对尚未访问的编号结点继续进行广度优先搜索,直到所有结点被访问

Input

第一行输入t,表示有t个测试实例

第二行输入n,表示第1个图有n个结点

第三行起,每行输入邻接矩阵的一行,以此类推输入n行

第i个结点与其他结点如果相连则为1,无连接则为0,数据之间用空格隔开

以此类推输入下一个示例

Output

每行输出一个图的广度优先搜索结果,结点编号之间用空格隔开

Sample

Input
2
4
0 0 1 1
0 0 1 1
1 1 0 1
1 1 1 0
5
0 0 0 1 1
0 0 1 0 0
0 1 0 1 1
1 0 1 0 0
1 0 1 0 0
Output
0 2 3 1 
0 3 4 2 1 

此方法只适用于连通图,因为oj的前台后台数据都是连通图所以可以过。

思路:

直接处理邻接矩阵,从第0行开始,遍历每一行的全部数据,若为1则存入队列,并且将这一列的所有值变成0。这说明已经遍历过这个节点了,从下一个节点开始遍历行的时候,就表明这一节点已经访问过。然后从队头开始递归,一个res队列存访问顺序,temp队列存遍历数据,不断进行入队和出队处理。当temp队列空了,依次输出res队列即可。

#include <iostream>
#include <queue>
using namespace std;
queue<int> res;
queue<int> temp;
int k = 0;
int p = 0;
void DFS(int** arr, int n, int v) {
	if (!temp.empty()) 
		//若队列不为空则队头出队
		temp.pop();
	for (int j = 0; j < n; j++) {//对每一行进行遍历
		if (arr[v][j] == 1) {
			//当前这一列都置为0
			for (int k = 0; k < n; k++) {
				arr[k][j] = 0;
			}
			arr[j][v] = 0;//两个节点相互连接,例如v1到v3已经访问了,就不用再看v3到v1。请不要复制粘贴
			temp.push(j);
			res.push(j);
		}
	}
	if (!temp.empty())	
		//如果栈不为空,对队头数据进行递归。
		DFS(arr, n, temp.front());
	else {
		//如果栈空了则输出结果
		while (!res.empty()) {
			cout << res.front() << " ";
			res.pop();
		}
	}
}
int main() {
	int t;
	cin >> t;
	while (t--) {
		int n;
		cin >> n;
		int** arr = new int* [n];
		for (int i = 0; i < n; i++){
			arr[i] = new int[n];
			for (int j = 0; j < n; j++) {
				cin >> arr[i][j];
			}
		}
		cout << "0 ";
		DFS(arr, n, 0);
		cout << endl;
	}
	return 0;
}

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

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

相关文章

vscode设置vue3代码格式化

vscode设置vue3代码格式化 vscode设置vue3代码格式化 下载插件设置格式化时选用的插件实际使用 使用Prettier默认配置使用Prettier添加自定义配置使用Volar 完整配置文件参考链接 下载插件 可以使用Volar或Prettier 设置格式化时选用的插件 mac&#xff1a;【shift】【op…

基于单片机教室人数实时检测系统仿真及源程序

一、系统方案 1、本设计采用51单片机作为主控器。 2、红外传感器检测进出人数&#xff0c;液晶1602显示。 3、按键最多容纳人数&#xff0c;烟雾报警。 二、硬件设计 原理图如下&#xff1a; 三、单片机软件设计 1、首先是系统初始化 void lcd_init() { lcd_write_com(0x38…

【IDEA】IntelliJ IDEA的使用2.0——结合实际场景提升工具使用

前言 IDEA作为一款非常不错的Java开发编辑工具&#xff0c;需要不断学习如何更好地使用IEDA工具&#xff0c;打造成得心应手的斧头。 本篇博客是结合实际场景提升IDEA使用的博客&#xff0c;会陆续收集一些实际使用场景&#xff0c;结合这些场景阐述如何更好地使用IDEA工具。…

zabbix的服务器端 server端部署

zabbix的服务器端 server 主机iplocalhost&#xff08;centos 7&#xff09;192.168.10.128 zabbix官网部署教程 但是不全&#xff0c;建议搭配这篇文章一起看 zabbixAgent部署 安装mysql 所有配置信息和Zabbix收集到的数据都被存储在数据库中。 下载对应的yum源 yum ins…

YOLO改进系列之注意力机制(CloAttention模型介绍)

CloAttention来自清华大学的团队提出的一篇论文CloFormer&#xff0c;作者从频域编码的角度认为现有的轻量级视觉Transformer中&#xff0c;大多数方法都只关注设计稀疏注意力&#xff0c;来有效地处理低频全局信息&#xff0c;而使用相对简单的方法处理高频局部信息。很少有方…

内网穿透(frp和proxychains4)

一、准备工作 需要三台机器&#xff0c;去哦这里准备的是win7&#xff08;目标主机&#xff09;&#xff0c;kali&#xff08;攻击者&#xff09;&#xff0c;红帽&#xff08;跳板&#xff09; 攻击机&#xff08;kali&#xff09;&#xff1a;192.168.10.15 跳板机&#xff0…

Python二级 每周练习题26

如果你感觉有收获&#xff0c;欢迎给我打赏 ———— 以激励我输出更多优质内容 练习一: 从键盘输入任意字符串&#xff0c;按照下面要求分离字符串中的字符&#xff1a; 1、分别取出该字符串的第偶数位的元素&#xff08;提醒注意&#xff1a;是按照从左往右数的 方式确定字…

【Linux】Ubuntu16.04系统查看已安装的python版本,及其配置

前情提示&#xff1a;我已经在Ubuntu16.04里用源码安装了python3.8.11&#xff0c;Ubuntu16.04系统默认安装2.7.12与3.5.2 1.查看已安装版本 python2 --version #查看python2安装版本 python3 --version #查看python3安装版本 python3.5 --version #查看python3.5安装…

Python入门:一文详解Python列表(List)操作方法

文章目录 前言一、创建一个列表二、访问列表中的值三、更新列表四、删除列表元素六、Python列表截取七、Python列表操作的函数和方法关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②…

Java学习之路 —— Day1(环境配置、变量)

文章目录 前言1. 搭建Java开发环境1.1 下载java1.2 JDK组成1.3 使用idea开发 2. java基本语法2.1 变量类型2.2 Scanner输入2.3 随机数2.4 数组 前言 已经好久没有写博客了&#xff0c;打开这个网站有一种熟悉又陌生的感觉。 前段时间一直在准备秋招&#xff0c;现在也告一段落…

MySQL集群高可用架构之MHA

目录 一、概念&#xff1a; 1、MHA的工作流程&#xff1a; 2、MHA工作原理&#xff1a; 二、MHA实验&#xff1a; 一、概念&#xff1a; MHA&#xff1a;masterhight availabulity&#xff1a;基于主库的高可用环境下&#xff0c;实现主从复制以及故障切换 主从的架构&…

Swift 警惕“隐式异步(implicitly asynchronous)”方法的执行陷阱

概览 actor 是 Swift 5.5 中一个“不可思议”的新类型&#xff0c;可以把它看做成一个数据同步器。actor 中所有属性和方法都会被自动“串行”&#xff08;serializes&#xff09;访问和执行&#xff0c;从而有效避免了数据竞争的发生。 不过&#xff0c;在一些微妙的情境下使…

Axure原型设计工具怎么样?有替代软件吗?

Axurerp是一种快速原型设计工具&#xff0c;可以制作高度互动的HTML原型。设计师不仅可以使用Axure绘制线框图和原型&#xff0c;还可以在Axurerp中完成一系列用户体验设计。在本文中&#xff0c;我们将根据用户体验设计师的真实经验&#xff0c;触发用户体验设计师的实际工作&…

绕过PPL机制窃取凭证

Mimikatz窃取凭证攻击 正常权限cmd情况下mimikatz是无法直接提权的,所以窃取密码更是不行的。 但管理员权限下的mimikatz是可以获取到主机登陆密码的。 PPL安全机制 在此之前,用户只需要使用SeDebugPrivilege令牌权限即可获取任意进程的所有访问权限;随后Windows8.1 在此…

阿里云 OSS使用介绍

1、什么是阿里云 OSS&#xff1f; OSS 为 Object Storage Service&#xff0c;即对象存储服务。是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 OSS 具有与平台无关的 RESTful API 接口&#xff0c;可以在任意应用、任意时间、任意地点 存储与访问 任何类型的数据。…

算法的时间复杂度!!!很懵逼吧~

度量一个程序的执行时间通常有两种方法&#xff1a;事后统计的方法、事前估算法 1.事后统计的方法 这种方法可行,但是有两个问题: 一是要想对设计的算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,这种方式&#xff0c;…

PostGIS学习教程五:数据

教程的数据是有关纽约市的四个shapefile文件和一个包含社会人口经济数据的数据表。在前面一节我们已经将shapefile加载为PostGIS表&#xff0c;在后面我们将添加社会人口经济数据。 下面描述了每个数据集的记录数量和表属性。这些属性值和关系是我们以后分析的基础。 要在pgAdm…

2021年09月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 如下图所示,小明想要做一个文字逐字出现的动画效果,他画出了程序的流程图,以下哪个程序可以实现? A: B: C: D: 答案&#

PP-YOLO: An Effective and Efficient Implementation of Object Detector(2020.8)

文章目录 Abstract1. Introduction先介绍了一堆前人的work自己的workexpect 2. Related Work先介绍别人的work与我们的区别 3.Method3.1. ArchitectureBackboneDetection NeckDetection Head 3.2. Selection of TricksLarger Batch SizeEMADropBlockIoULossIoU AwareGrid Sensi…

Elasticsearch:ES|QL 快速入门

警告&#xff1a;此功能处于技术预览阶段&#xff0c;可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题&#xff0c;但技术预览版中的功能不受官方 GA 功能的支持 SLA 的约束。目前的最新发行版为 Elastic Stack 8.11。 Elasticsearch 查询语言 (ES|QL) 提供了一种强…