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

Python:每日一题之发现环(DFS)

题目描述

小明的实验室有 N 台电脑,编号 1⋯N。原本这 N 台电脑之间有 N−1 条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。

不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了 BUG。

为了恢复正常传输。小明需要找到所有在环路上的电脑,你能帮助他吗?

输入描述

输入范围:

第一行包含一个整数 N 。

以下 N 行每行两个整数 a,b,表示 a 和 b 之间有一条数据链接相连。

其中, 1≤N≤10^5,1≤a,b≤N。

输入保证合法。

输出描述

按从小到大的顺序输出在环路上的电脑的编号,中间由一个空格分隔。

输入输出样例

示例

输入

5
1 2
3 1
2 4
2 5
5 3

输出

1 2 3 5

 思路:

正常链接状态:
        1、树状连接网络每个节点只有一个父节点
        2、若一个父节点的子节点被发现已经标记,则该子节点一定在环上
深度优先搜索过程中查找已经标记的点

参考代码:

N = int(input())
edge = [[] for i in range(N+1)] #邻接表
pre = [0] * (N+1)
ring = []  #保存以后的节点
vis = [False] * (N+1)
for i in range(N):u, v = map(int, input().split())edge[u].append(v)edge[v].append(u)def dfs(x,father):  # x 表示当前节点,father表示父亲节点vis[x] = True   #标记for son in edge[x]: # son 子节点if len(ring) > 0: #是否被标记returnif not vis[son]: #判断子节点是否访问过pre[son] = x   #父节点等于当前节点dfs(son, x)   elif son != father: #子节点不等于父亲节点tmp = xwhile tmp != son:ring.append(tmp)tmp = pre[tmp]ring.append(son)
dfs(1, 0)
ring.sort()
for k in ring: print(k,end=' ')

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

相关文章:

  • C++设计模式(14)——享元模式
  • SpringCloud之Eureka客户端服务启动报Cannot execute request on any known server解决
  • 从零开始搭建kubernetes集群环境(虚拟机/kubeadm方式)
  • 【零基础入门前端系列】—表格(五)
  • C#开发的OpenRA的只读字典IReadOnlyDictionary实现
  • mulesoft MCIA 破釜沉舟备考 2023.02.14.06
  • Python网络爬虫 学习笔记(1)requests库爬虫
  • Splay
  • 智能网联汽车ASIL安全等级如何划分
  • Stable Diffusion 1 - 初始跑通 文字生成图片
  • 【cuda入门系列】通过代码真实打印线程ID
  • 【Python语言基础】——Python NumPy 数据类型
  • 数据工程师需要具备哪些技能?
  • Cosmos 基础 -- Ignite CLI(二)Module basics: Blog
  • Quartz 快速入门案例,看这一篇就够了
  • 图解LeetCode——1233. 删除子文件夹(难道:中等)
  • Doris--简单使用
  • 使用GPT让你的RStudio如虎添翼
  • Python 算法交易实验45 再探量化
  • Dubbo加载配置文件方式,加载流程,加载配置文件源码解析
  • 十大开源测试工具和框架,一定有你需要的
  • 加密技术在android中的应用
  • 备战蓝桥杯【一维前缀和】
  • 研报精选230214
  • 【SSL/TLS】准备工作:证书格式
  • Linux常用命令---系统常用命令
  • C 结构体
  • 手语检测识别
  • android fwk模块之Sensor架构
  • 安装less-loader5出现webpack版本不兼容