
蓝桥训练:找最大环
读取输入:读取小朋友的数量 构建图:使用数组 初始化变量: 遍历每个节点:对于每个未被访问的节点,使用 DFS 遍历,找到环的长度。 更新最大环长度:在找到一个环时,更新最长环长度。
发布日期:2021-05-14 16:48:35
浏览次数:13
分类:精选文章
本文共 1045 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要找到满足条件的最大圈,使得每个小朋友都有自己最崇拜的小朋友在他的右手边。这个问题可以通过图论中的环结构来解决。
方法思路
问题分析:
- 每个小朋友都指向他们最崇拜的小朋友,这意味着图中每个节点有且仅有一个出边。
- 这样的图由多个环构成,我们需要找出最长的环。
算法选择:
- 使用深度优先搜索(DFS)来遍历每个节点,找到所有环,并记录最长的环长度。
复杂度分析:
- 时间复杂度:O(N),因为每个节点只被访问一次。
- 空间复杂度:O(N),用于存储访问标记数组和其他辅助数组。
解决代码
n = int(input())a = list(map(int, input().split()))next = [0] * (n + 1)for i in range(1, n + 1): next[i] = a[i - 1]visited = [False] * (n + 1)max_len = 0for i in range(1, n + 1): if not visited[i]: current = i length = 0 while True: if visited[current]: if current == i: length += 1 if length > max_len: max_len = length break visited[current] = True length += 1 current = next[current]print(max_len)
代码解释
n
和每个小朋友崇拜的对象列表 a
。next
来表示每个小朋友指向的崇拜对象。visited
数组用于记录每个节点是否被访问过,max_len
记录最长的环长度。这种方法确保了每个节点只被访问一次,能够高效地找到最长环。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年05月04日 19时18分16秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
CoreCLR源码探索(八) JIT的工作原理(详解篇)
2019-03-06
IOS开发Swift笔记16-错误处理
2019-03-07
flume使用中的一些常见错误解决办法 (地址已经使用)
2019-03-07
andriod 开发错误记录
2019-03-07
C语言编译错误列表
2019-03-07
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
2019-03-07
张一鸣:创业7年,我经历的5件事
2019-03-07
《web安全入门》(四)前端开发基础Javascript
2019-03-07
python中列表 元组 字典 集合的区别
2019-03-07
python struct 官方文档
2019-03-07
Android DEX加固方案与原理
2019-03-07
Android Retrofit2.0 上传单张图片和多张图片
2019-03-07
iOS_Runtime3_动态添加方法
2019-03-07
Leetcode第557题---翻转字符串中的单词
2019-03-07
Problem G. The Stones Game【取石子博弈 & 思维】
2019-03-07
Unable to execute dex: Multiple dex files
2019-03-07
Java多线程
2019-03-07
Unity监听日记
2019-03-07