欧拉通路332. Reconstruct Itinerary
来源:互联网 发布:物理实验模拟软件 编辑:程序博客网 时间:2024/05/22 03:19
解:
欧拉通路:遍历所有的边的一条路径
存在的充要条件:
2个点一个点出度大于入度(起始点),一个点入度大于出度(终止点)
或 所有点出度=入度(欧拉回路)
欧拉回路:遍历所有的边并回到初始点的一条回路
存在的充要条件:
所有点出度=入度(欧拉回路)
此题即遍历所有的边的一条路径,并不一定要回到JFC,所以是求欧拉通路问题,用dfs其实就是套圈法:
1、用dfs一延边找点,由于题目说要字典序,就按字典序来找,若找到不能继续往下找的点,记为p,此即为终止点
2、回溯到其上层节点,走别的路,由于p是唯一的终止点,所以再找一定最后可以回来(除p和JFC外其他都出度=入度)
3、不断重复1、2,直到所有边全部遍历
def findItinerary(self, tickets): """ :type tickets: List[List[str]] :rtype: List[str] """ res = [] stack = [] stack.append('JFK') while 1 : if len(tickets) == 0: break EdgeIndex = -1 NowPoint = stack[-1] MinPoint = 'ZZZ' flag = 0 for i in range(0,len(tickets)): if tickets[i][0] == NowPoint: if len(res) > 0: if tickets[i][1] == res[0]: flag = 1 continue if MinPoint > tickets[i][1]: MinPoint = tickets[i][1] EdgeIndex = i if EdgeIndex == -1: if flag == 1: break res.append(stack.pop()) continue stack.append(MinPoint) del tickets[EdgeIndex] return stack + res[::-1]
注意:res记录的时候是逆序的,最后要reverse一下
0 0
- 欧拉通路332. Reconstruct Itinerary
- *[LeetCode]332. Reconstruct Itinerary
- 332. Reconstruct Itinerary
- leetcode 332. Reconstruct Itinerary
- 332. Reconstruct Itinerary
- LeetCode *** 332. Reconstruct Itinerary
- LeetCode 332. Reconstruct Itinerary
- leetcode 332. Reconstruct Itinerary
- 332. Reconstruct Itinerary
- 332. Reconstruct Itinerary
- 332. Reconstruct Itinerary(重要)
- [leetcode] 332. Reconstruct Itinerary
- Leetcode 332. Reconstruct Itinerary
- 332. Reconstruct Itinerary
- 332. Reconstruct Itinerary
- Leetcode 332. Reconstruct Itinerary
- 332. Reconstruct Itinerary**
- (未完成)332. Reconstruct Itinerary
- implements Serializable有什么作用
- ASP.NET内置对象
- 整洁代码
- The method of type must override a superclass method 解决方式
- JavaWeb
- 欧拉通路332. Reconstruct Itinerary
- replace()第二个参数为function时的小研究
- Repeated column in mapping for entity:(should be mapped with insert="false" update="false")
- uva352 The Seasonal War-python
- Youki的C++命名规则
- Plist文件
- iOS开发之ReplayKit框架学习
- yuekao=bean1
- CentOS6系统启动流程