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

LeetCode:261. 以图判树 - Python

261. 以图判树

问题描述:

给定从 0 n-1 标号的 n 个结点,和一个无向边列表(每条边以结点对来表示),请编写一个函数用来判断这些边是否能够形成一个合法有效的树结构。

示例 1:

输入:n = 5, 边列表 edges = [[0,1], [0,2], [0,3], [1,4]]
输出:true

示例 2:

输入:n = 5, 边列表 edges = [[0,1], [1,2], [2,3], [1,3], [1,4]]
输出:false

注意:
你可以假定边列表 edges 中不会出现重复的边。由于所有的边是无向边,边 [0,1] 和边 [1,0] 是相同的,因此不会同时出现在边列表 edges 中。

问题分析:

这题目有点贵呀,是LeetCode的VIP题目,第一次见还有点蒙,其实仔细想想也没啥难的。问题分析,判断一个无向图能否勾成一个树,很显然这个图要满足3个条件:

  1. 这个图不存在环
  2. 这个图所有节点是连通
  3. 这个图的边数一定为 n-1, 因为如果一棵树有n个节点,那么它的边一定是n-1
  4. 是不是可以得出这样的结论:如果有n-1条边且有环是一定是不连通,是不是可以说明,在n-1条边的条件下,只要判断是否有环即可?没有环路边数为n-1,就一定能构造成树?(没有严谨的证明哈,感觉反证法可以证明)

现在看看题目如何做?
(1)第一个条件就是判断这个图的边数是否等于n-1,很显然不符合就直接返回 False 即可。
(2)使用并查集的思想判断是否存在环路,如果存在环路直接返回 False,否则最后就返回 True

Python3实现:

# @Time   :2023/09/06
# @Author :Liuclass Solution:def validTree(self, n, edges):if len(edges) != n - 1:  # 边数是否等于 n - 1return Falsedef find(x):  # 并查集查找if fa[x] != x:fa[x] = find(fa[x])return fa[x]fa = [i for i in range(n)]for x, y in edges:  # 判断两个点是否在同一个并查集里面fa_x = find(x)fa_y = find(y)if fa_x == fa_y:return Falsefa[fa_x] = fa_yreturn Trueif __name__ == '__main__':solu = Solution()n, edges = 7, [[0, 1], [1, 2], [2, 3], [4, 5], [4, 6], [5, 6]]print(solu.validTree(n, edges))

相关参考:
[1]LeetCode:261. 以图判树 是VIP 题目,反正我是打不开。
[2] 代码参考: yiduobo的每日leetcode 261.以图判树。只在本地验证了,没有在线验证。
声明: 总结学习,有问题或不当之处,可以批评指正哦,谢谢。

http://www.lryc.cn/news/161744.html

相关文章:

  • Linux目录结构和远程使用
  • 淘宝销量展示方式变更背后的逻辑
  • Bytebase 和 GitLab 签署 Technology Partner 技术合作伙伴协议
  • 杭州高职画室哪家好?如何选择高职画室?高职美术学习选哪家画室?
  • 原型模式简介
  • SpringMVC(一)
  • 树的基本概念和存储结构
  • 深圳企业制作宣传片群体定位的重要性
  • 2309亚当arsd的11.1版本
  • spring---第七篇
  • 编程要搞明白的东西(二)
  • 检索与毒害 —— 对抗人工智能供应链攻击
  • Linux 禁止用户或 IP通过 SSH 登录
  • 14.Redis 主从复制
  • 常见的图像格式介绍:RAW、RGB、YUV
  • 极简极速-Bitset (bitmap)实现考勤打卡场景
  • word如何插入图片?3种常用的方法
  • Python/C API - 模組,型別,Tuple,例外和引用計數
  • 人工智能轨道交通行业周刊-第59期(2023.9.4-9.10)
  • ASP.NET Core 中的 MVC架构
  • C# PSO 粒子群优化算法 遗传算法 随机算法 求解复杂方程的最大、最小值
  • 网络协议从入门到底层原理学习(三)—— 路由
  • 2023/9/6 -- C++/QT
  • python爬虫,多线程与生产者消费者模式
  • WordPress 提示“此站点遇到了致命错误”的解决方法
  • Vue3,Typescript中引用组件路径无法找到模块报错
  • 科技成果鉴定之鉴定测试报告
  • NFTScan 浏览器正式版上线 2 周年!
  • 为什么要使用Token
  • 前端面试的话术集锦第 8 篇:高频考点(JS性能优化 性能优化琐碎事)