当前位置: 首页 > news >正文

经典算法 判断一个图中是否有环

判断一个图中是否有环

问题描述

给一个以0 0结尾的整数对列表,除0 0外的每两个整数表示一条连接了这两个节点的边。假设节点编号不超过100000大于0。你只要判断由这些节点和边构成的图中是否存在环。存在输出YES,不存在输出NO。

在这里插入图片描述

输入样例1

6 8  5 3  5 2  6 4 5 6  0 0

输出样例1

NO

输入样例2

8 1  7 3  6 2  8 9  7 5 7 4  7 8  7 6  0 0

输出样例2

NO

输入样例3

3 8  6 8  6 4 5 3  5 6  5 2  0 0

输出样例3

YES

输入样例4

1 2 3 4 0 0

输出样例4

NO

输入样例5

空图没有环

0 0

输出样例5

NO

c++代码

#include<bits/stdc++.h>using namespace std;int a, b;
int arr[100001];
bool key = false;int myfind(int x) {int root = x;while(root != arr[root]) root = arr[root];int i = x, j;while(i != root) {j = arr[i];arr[i] = root;i = j;}return root;
}void mymerge(int x, int y) {x = myfind(x), y = myfind(y);if (x != y) arr[y] = arr[x];
}int main() {for (int i = 1; i <= 100000; i++) arr[i] = i;while(true) {scanf("%d %d", &a, &b);if (a == 0 && b == 0) break;if (key) continue;int x = myfind(a), y = myfind(b);if (x == y) key = true;else mymerge(a, b);}if (key) printf("YES");else printf("NO");return 0;
}//by wqs

算法解析

给每个点一个初始的编号,并初始化所有节点的父亲为本身。每新加入一条边就把边相连的两个集合合并到一起,如果边相连的集合原本就是同一个,说明已经成环。

相关文章:

  • 界面控件DevExpress .NET MAUI v24.2亮点:MVVM功能增强
  • Rust学习之实现命令行小工具minigrep(二)
  • qt/C++面试题自用学习(更新中)
  • Gitlab SSH Jenkins Pipeline Supervisor部署
  • 大模型训练显存压缩实战:ZeRO-3 vs 梯度累积 vs 量化混合策略
  • 深度为16,位宽8bit的单端口SRAM——学习记录
  • 全网通emotn ui桌面免费吗?如何开机自启动
  • leetcode:3210. 找出加密后的字符串(python3解法)
  • 淘宝商品数据高并发采集方案:API 接口限流机制与分布式调用实战
  • SnailJob:分布式环境设计的任务调度与重试平台!
  • Centos/RedHat 7.x服务器挂载ISCSI存储示例(无多路径非LVM)
  • opencv腐蚀的操作过程
  • DeepSeek高阶玩法教程:从入门到精通的实战案例
  • 晶晨线刷工具下载及易错点说明:Key文件配置错误/mac剩余数为0解决方法
  • 鸿蒙系统开发状态更新字段区别对比
  • SAP S4HANA embedded analytics
  • 【QT】 QT定时器的使用
  • RPCRT4!OsfCreateRpcAddress函数分析之AssociationBucketMutexMemory数组的填充
  • Grass.io项目现状:DePIN亮眼明星,扩张中的AI数据银行
  • C#核心学习(三)常见的泛型数据结构类(1)List和Dictionary
  • 赵乐际主持十四届全国人大常委会第十五次会议闭幕会并作讲话
  • 摩根大通任命杜峯为亚太区副主席,加码中国市场业务布局
  • 屠呦呦当选美国科学院外籍院士
  • 中国人保不再设监事会,国寿集团未再设置监事长职务
  • 从咖啡节到话剧、演唱会,上海虹口“文旅商体展”联动促消费
  • AI观察|算力饥渴与泡沫