332. 重新安排行程 DFS欧拉回路

332. 重新安排行程

难度:中等
好几天前的每日一题,偷懒今天才写
题目描述
在这里插入图片描述

解题思路
在这里插入图片描述
在这里插入图片描述
主要思想大概是先建图,然后从起点开始dfs吗,但是和传统回溯不同,在递归到最后的时候才把这次结果加入到结果集合里,并且要逆序插入

/*
					 * 332. 重新安排行程
					 * 2020/8/27
					 * medium
					 */
					 public List<String> findItinerary(List<List<String>> tickets) {
						 Map<String, PriorityQueue<String>> graph = new HashMap<>();
						 List<String> res = new LinkedList<>();
						 if(tickets == null || tickets.size() == 0) {
							 return res;
						 }
						 for (List<String> pair : tickets) {
							 String from = pair.get(0);
							 String to = pair.get(1);
							 PriorityQueue<String> nbr = graph.computeIfAbsent(from, k -> new PriorityQueue<>());
							 nbr.add(to);
						 }
						 dfsFindItinerary(graph,"JFK",res);
						 
						 return res;

					    }
					 
					 //DFS方式遍历图
					 public void dfsFindItinerary(Map<String, PriorityQueue<String>> graph,String src,List<String> res) {
						 
						 PriorityQueue<String> next = graph.get(src);
						 while(next != null && next.size() != 0) {
							 //选择一个最小的出队,因为要不重复,所以遍历完删掉这个
							 String dst = next.poll();
							 dfsFindItinerary(graph,dst,res);
						 }
						 //逆序插入
						 res.add(0,src);
						 
					 }

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值