华为机考-树上逃离

简介: 华为机考-树上逃离

题目


给定一棵树,这个树有n个节点,节点编号从0开始依次递增,0固定为根节点。在这棵树上有一个小猴子,初始时该猴子位于根节点(0号) 上,小猴子一次可以沿着树上的边从一个节点挪到另一个节点,但这棵树上有一些节点设置有障碍物,如果某个节点上设置了障碍物,小猴子就不能通过连接该节点的边挪动到该节点上。问小猴子是否能跑到树的叶子节点(叶子节点定义为只有一条边连接的节点),如果可以,请输出小猴子跑到叶子节点的最短路径(通过的边最少),否则输出字符串NULL。


输入


第一行给出数字n,表示这个树有n个节点,节点编号从0开始依次递增,0固定为根节点,1<=n<10000

第二行给出数字edge,表示接下来有edge行,每行是一条边

接下来的edge行是边: x y,表示x和y节点有一条边连接

边信息结束后接下来的一行给出数字block,表示接下来有block行,每行是个障碍物

接下来的block行是障碍物: X,表示节点x上存在障碍物

输出

如果小猴子能跑到树的叶子节点,请输出小猴子跑到叶子节点的最短路径(通过的边最少),比如小猴子从0经过1到达2 (叶子节点) ,那么输出“0->1->2”,否则输出“NULL”。注意如果存在多条最短路径,请按照节点序号排序输出,比如0->1和0->3两条路径,第一个节点0一样,则比较第二个节点1和3,1比3小,因此输出0->1这条路径。


样例


1. 2
2. 1
3. 0 1
4. 1
5. 1
6. 
7. 4
8. 3
9. 0 1
10. 0 2
11. 0 3
12. 1
13. 2
14. 
15. 7
16. 6
17. 0 1
18. 0 3
19. 1 2
20. 3 4
21. 1 5
22. 5 6
23. 1
24. 5
25. 
26. 4
27. 3
28. 0 1
29. 0 2
30. 0 3
31. 2
32. 2
33. 3

思路


使用广度优先搜索寻找最短路径

1. from collections import deque
2. 
3. n=int(input())
4. map = {}
5. edge = int(input())
6. for _ in range(edge):
7.     l, r = input().split(' ')
8.     l,r = int(l),int(r)
9. if l not in map: map[l]=[]
10. if r not in map: map[r]=[]
11. map[l].append(r)
12. map[r].append(l)
13. 
14. block = int(input())
15. blocks = set()
16. for i in range(block):
17.     blocks.add(int(input()))
18. 
19. def solve():
20.     queue=deque()
21.     queue.append([0,[0]])
22.     vis = set()
23.     vis.add(0)
24. while len(queue):
25.         node,path = queue.popleft()
26. if node!=0 and len(map[node])==1:
27. print(str(path)[1:-1].replace(",","->").replace(" ",""))
28. return
29. for item in map[node]:
30. if item not in blocks and item not in vis:
31.                 queue.append([item,path+[item]])
32.                 vis.add(item)
33. print("NULL")
34. 
35. solve()
目录
相关文章
|
算法 测试技术 Android开发
LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题
学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场 LeetCode 周赛的解题报告,一起体会上分之旅。
77 2
LeetCode 周赛上分之旅 #45 精妙的 O(lgn) 扫描算法与树上 DP 问题
|
8月前
校门外的树
校门外的树
29 0
|
8月前
|
算法 测试技术 C#
【欧拉回路】【图论】【并集查找】765. 情侣牵手
【欧拉回路】【图论】【并集查找】765. 情侣牵手
|
测试技术 C++
【C++从0到王者】第三十三站:AVL树
【C++从0到王者】第三十三站:AVL树
42 0
|
算法 C++
食物链顶端的算法
食物链顶端的算法
|
人工智能 vr&ar C++
202104-4校门外的树
202104-4校门外的树
88 0
202104-4校门外的树
|
人工智能 算法 机器人
瘫痪父亲穿机械骨骼接女儿放学引热议!清华新研究助力无拐杖行走
瘫痪父亲穿机械骨骼接女儿放学引热议!清华新研究助力无拐杖行走
177 0
|
安全
左手写代码,右手维护互联网世界和平
开发者是互联网的创造者,往往洞悉每一个安全问题背后的真相。
2726 0
|
iOS开发 Windows
设计图标的时候,一定要抵制住这6个诱惑!
所有伟大的图标都是一样的伟大,所有失败的图标都玩着不一样的戏码。 绝大多数优秀的设计一样,最优秀最伟大的图标大多是……隐形的。 最为我们熟知的搜索图标,可以说是极为完美的,它简单,可识别度强,每个人都知道它代表着什么。
989 0