
并查集(小西的迷宫)
使用并查集(Union-Find):并查集可以帮助我们高效地检测连通性和管理连通的集合。通过并查集,我们可以在合并连通的房间时,检测是否存在环。 检测环和连通性:在合并两个房间时,如果两个房间已经处于同一个连通分支中,则表示存在环,这样迷宫不符合条件。我们还需要确保所有的通道均为双向连通。 树的性质控制:合并两个集合时,总是将较小的树合并到较大的树中,这样可以保证迷宫的结构是一棵树,每个房间只能有一个唯一的根节点。 并查集初始化:父数组 查找函数 合并函数 主程序逻辑:读取输入数据,处理特殊情况,并初始化并查集。然后对每组数据进行处理,最后检查是否形成一棵树。
发布日期:2021-05-15 00:45:54
浏览次数:19
分类:精选文章
本文共 1780 字,大约阅读时间需要 5 分钟。
为了解决这个问题,我们需要判断给定的迷宫是否符合小希的设计思路,即所有通道都是双向连通的,并且任意两个房间之间只能有一条唯一的路径。
方法思路
解决代码
#include#include int a[100002];int book[100002];int find(int x) { if (a[x] == x) return x; a[x] = find(a[x]); return a[x];}int f;void merge(int x, int y) { int t1, t2; t1 = find(x); t2 = find(y); if (t1 != t2) { a[t2] = t1; } else { f = 0; // f=0说明存在环 }}int main() { int i, x, y, s; while (~scanf("%d%d", &x, &y)) { f = 1; s = 0; // 特殊情况处理:通道连接0 0 if (x == 0 && y == 0) { printf("Yes\n"); continue; } // 初始化父数组和大小数组 for (i = 1; i < 100002; ++i) { a[i] = i; book[i] = 0; } book[x] = 1; book[y] = 1; // 开始处理通道连接 merge(x, y); // 处理下一个通道 while (~scanf("%d%d", &x, &y)) { if (x == 0 && y == 0) { break; } book[x] = 1; book[y] = 1; merge(x, y); } // 检查是否存在环 if (f == 0) { printf("No\n"); continue; } // 检查是否为一棵树 s = 0; for (i = 1; i <= 100002; ++i) { if (book[i] && a[i] == i) { s++; } } if (s == 1) { printf("Yes\n"); } else { printf("No\n"); } } return 0;}
代码解释
a
和标记数组book
用于记录每个房间的父节点和是否被访问。find
:通过路径压缩优化查找操作,减少时间复杂度。merge
:用于合并两个房间的集合,检测是否存在环。通过这种方法,我们可以高效地判断给定的迷宫是否符合小希的设计条件。
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月24日 04时32分26秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Spring cloud --分布式配置中心组件Spring Cloud Config
2019-03-12
UE4接入Android第三方库2——通过JIN与GameActivity通信
2019-03-12
Unity Job System 2——并行处理数据
2019-03-12
BIG解决保险欺诈问题,开创数字化保险时代
2019-03-12
Apache JMeter5.3 压力测试
2019-03-12
maven打包多环境配置
2019-03-12
c++ hpp使用好处
2019-03-12
Mac 使用Eclipse老是闪退解决方案
2019-03-12
谈笑间学会-Hbase Rowkey设计
2019-03-12
spark概述
2019-03-12
linux 基础常见操作,查看cpu、内存、磁盘情况
2019-03-12
[密码学] RSA同模攻击与选择密文攻击
2019-03-12
[蓝桥杯2018初赛]测试次数
2019-03-12
JavaScript 知识梳理[一] 变量类型,浅拷贝,深拷贝
2019-03-12
Linux学习笔记(二):文件权限与目录配置
2019-03-12
部署和使用Harbor镜像仓库
2019-03-12
利用PowerShell把Python 2.x代码转化为Python 3.x代码
2019-03-12
Coursera普林斯顿算法课第二次作业
2019-03-12
pip命令 failed to create process.
2019-03-12
做SMTP客户端遇报错:535 Error
2019-03-12