1076: 判断给定有向图是否存在回路

解法:

直观的方法用邻接矩阵dfs,这是错误的代码

#include<iostream>
#include<vector>
using namespace std;
int arr[100][100];
int f = 0;
void dfs(vector<int>& a, int u) {
	a[u] = 1;
	for (int i = 0; i < a.size(); i++) {
		if (arr[u][i]&&!a[i]) {
			if (a[i]) f = 1;
			dfs(a, i);
			a[i] = 0;
		}
	}
}
int main() {
	int n, e;
	cin >> n >> e;
	vector<int> vis(n, 0);
	char a, b;
	for (int i = 0; i < n; i++) cin >> a;
	for (int i = 0; i < e; i++) {
		cin >> a >> b;
		arr[a - 'A'][b - 'A'] = 1;
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			for (int& x : vis) x = 0;
			if (arr[i][j])
				dfs(vis, j);
		}
	}
	if (f) cout << "yes";
	else cout << "no";

	return 0;
}

用拓扑排序

拓扑排序是一种对有向无环图(DAG)进行排序的算法。它使用了一个队列来存储入度为0的顶点,并逐步将这些顶点出队并处理。

具体的拓扑排序算法可以描述如下:

  1. 统计每个顶点的入度,得到一个入度数组或哈希表。
  2. 将入度为0的顶点加入到队列中。
  3. 当队列不为空时,执行以下操作:a. 取出队列的头部顶点。 b. 将该顶点加入到排序结果中。 c. 访问该顶点的所有邻接顶点,并更新它们的入度,如果入度为0,则加入到队列中。
  4. 如果排序结果中的顶点数量等于图中的顶点数量,则表示拓扑排序成功;否则,图中存在环,拓扑排序失败。

拓扑排序的思路是将入度为0的顶点不断加入到排序结果中,并将其邻接顶点的入度减1。通过不断重复这个过程,最终可以得到一个有序的顶点序列。

拓扑排序算法的时间复杂度为O(V+E),其中V是顶点的数量,E是边的数量。拓扑排序算法需要遍历图中的每个顶点和边。

#include<iostream>
#include<vector>
#include<queue>
using namespace std;
vector<int> lj[100];
bool topsort(vector<int> &a) {
	int cnt = 0;
	queue<int> q;
	for (int i = 0; i < a.size(); i++) {
		if (!a[i]) q.push(i);
	}
	while (!q.empty()) {
		cnt++;
		int head = q.front();
		cout << head;
		q.pop();
		for (int i = 0; i < lj[head].size(); i++) {
			a[lj[head][i]]--;
			if (a[lj[head][i]]==0) q.push(lj[head][i]);
		}
	}
	if (cnt == a.size())return true;
	else return false;
}
int main() {
	int n, e;
	cin >> n >> e;
	vector<int> ideg(n, 0);
	char a, b;
	for (int i = 0; i < n; i++) cin >> a;
	while (e--) {
		cin >> a >> b;
		ideg[b - 'A']++;
		lj[a - 'A'].push_back(b - 'A');
	}
	if (topsort(ideg)) cout << "no";
	else cout << "yes";
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SecureFX 9.5.2 SecureCRT 9.5.2 官方下载

SecureCRT是一款由VanDyke Software公司开发的终端仿真软件&#xff0c;它提供了类似于Telnet和SSH等协议的远程访问功能。SecureCRT专门为网络管理员、系统管理员和其他需要保密访问网络设备的用户设计。 SecureCRT具有以下特点&#xff1a; 安全性&#xff1a;SecureCRT支持…

埋点——about前端

所谓“埋点”&#xff0c;是数据采集领域(尤其是用户行为数据采集领域)的术语&#xff0c;指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。比如用户某个icon点击次数、观看某个视频的时长等等,埋点的技术实质&#xff0c;是先监听软件应用运行过程中…

metaMIC:无参考错误组装识别和校正宏基因组组装

#环境很重要&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; conda create -n metaMIC conda activate metaMIC mamba install python3.8 mamba install -c …

grafana + Prometheus + node-exporter + pushgateway + alertmanager的监控解决方案

业内比较著名的监控解决方案&#xff0c;据笔者所知&#xff0c;大概是三套&#xff1a; 一个是zabbix的解决方案&#xff0c;一个是prometheusgrafana&#xff0c;一个是ELK zabbix比较重&#xff0c;而且原生支持监控SNMP&#xff0c;自带一个仪表盘&#xff0c;不需要额外…

Redis常用命令——String篇

前面我们讲解了一些 Redis 的全局命令&#xff08;Redis常用基本全局命令&#xff09;。所谓全局命令&#xff0c;就是可以匹配任意一个数据结构进行使用。但是不同的数据结构&#xff0c;也有自己的操作命令。本篇文章主要讲解的是 String 的操作命令&#xff0c;希望会对你有…

fortran77 初始化矩阵 打印矩阵 模版 备拷

1&#xff0c;源码 SUBROUTINE INIT_MATRIX(A, m, n, lda)DOUBLE PRECISION A(*)CALL SRAND(2024)DO i1, mDO j1, nA(i lda*(j-1)) RAND() RAND() C WRITE(*, (F8.4)) A(i)END DOEND DOENDSUBROUTINE PRINT_MATRIX(A, m, n, lda)DOUBLE PREC…

pytorch-20_1 LSTM在股价数据集上的预测实战

LSTM在股价数据集上的预测实战 使用完整的JPX赛题数据&#xff0c;并向大家提供完整的lstm流程。 导包 import numpy as np #数据处理 import pandas as pd #数据处理 import matplotlib as mlp import matplotlib.pyplot as plt #绘图 from sklearn.preprocessing import M…

Postgresql 基础学习

一、介绍 PostgreSQL是一个开源的关系型数据库管理系统&#xff08;RDBMS&#xff09;&#xff0c;它支持SQL语言的所有功能&#xff0c;具有可扩展性、高并发性和可靠性等特点。 以下是一些 PostgreSQL 的特点&#xff1a; 开源&#xff1a;PostgreSQL是一个非常受欢迎的开源…

计算机系统概述习题

选择题 电子计算机问世至今&#xff0c;新型计算机不断推陈出新&#xff0c;不管怎么更新&#xff0c;依然具有“存储程序”的特点&#xff0c;最早提出这种概念的是(B) A. 巴贝奇 B. 冯*诺伊曼 C. 帕斯卡 D. 贝尔 B下列描述中___是正确的。 A. 控制器能理解&#xff0c;解释…

Creating Server TCP listening socket *:6379: listen: Unknown error

错误&#xff1a; 解决方法&#xff1a; 在redis安装路径中打开cmd命令行窗口&#xff0c;输入 E:\Redis-x64-3.2.100>redis-server ./redis.windows.conf结果&#xff1a;

OpenHarmony轻量系统中内核资源主要管理方式

一、背景 OpenAtom OpenHarmony&#xff08;以下简称“OpenHarmony”&#xff09;轻量系统面向MCU类处理器例如ARM Cortex-M、RISC-V 32位的设备&#xff0c;硬件资源极其有限&#xff0c;支持的设备最小内存为128KiB&#xff0c;可以提供多种轻量级网络协议&#xff0c;轻量级…

5.1 Go 函数的定义与调用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

解决无法启动Redis,打开redis-server闪退的问题

【问题】 ① 双击redis-server.exe闪退。 ② 终端运行redis-server没反应。 但是终端运行redis -cli没问题。 【解决方法】 步骤1&#xff1a;找到Redis文件夹&#xff0c;右击&#xff0c;在终端打开。 步骤2&#xff1a;输入命令&#xff1a;redis-server.exe redis.windows…

论文阅读笔记:Task-Customized Mixture of Adapters for General Image Fusion

论文阅读笔记&#xff1a;Task-Customized Mixture of Adapters for General Image Fusion 1 背景2 创新点3 方法4 模块4.1 任务定制混合适配器4.2 提示生成4.3 提示驱动融合4.4 互信息正则化MIR4.5 任务定制化损失 5 实验5.1 VIF任务5.2 MEF任务5.3 MFF任务5.4 消融实验5.5 性…

网络编程 一

一、UDP socket api的使用 Java 把系统原生的封装了. 核心的类有两个: 1 -> DatagramSocket 操作系统中,有一类文件,就叫socket文件. socket文件,抽象表示了 " 网卡"这样的硬件设备. 进行网络通信最核心的硬件设备网卡 通过网卡发送数据,就是写…

人工智能应用-实验8-用生成对抗网络生成数字图像

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;代码&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;分析结果&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;实验总结&#x1f9e1;&#x1f9e1; &#x1f9…

spark的简单学习一

一 RDD 1.1 RDD的概述 1.RDD&#xff08;Resilient Distributed Dataset&#xff0c;弹性分布式数据集&#xff09;是Apache Spark中的一个核心概念。它是Spark中用于表示不可变、可分区、里面的元素可并行计算的集合。RDD提供了一种高度受限的共享内存模型&#xff0c;即RD…

想学接口测试,不知道那个工具适合?

引言&#xff1a; 接口测试在软件开发中扮演着至关重要的角色&#xff0c;它可以帮助我们验证系统的功能、性能和安全性。而选择适合的工具是进行接口测试的重要一步。本文将从零开始&#xff0c;为你详细介绍如何选择合适的工具&#xff0c;并提供规范的指导。 一、了解接口…

【大数据】MapReduce实战

文章目录 [toc]Word CountMapperReducerrun.sh本地调试 基于白名单的Word CountMapperReducerrun.sh本地调试 文件分发-fileMapperReducerrun.sh -cacheFileMapperReducerrun.sh -cacheArchiveMapperReducerrun.sh 杀死MapReduce Job排序压缩文件mr_ip_lib_python本地调试 个人…

PE文件(六)新增节-添加代码作业

一.手动新增节添加代码 1.当预备条件都满足&#xff0c;节表结尾没有相关数据时&#xff1a; 现在我们将ipmsg.exe用winhex打开&#xff0c;在节的最后新增一个节用于存放我们要增加的数据 注意&#xff1a;飞鸽的文件对齐和内存对齐是一致的 先判断节表末尾到第一个节之间…