leetcode:332. Reconstruct Itinerary
来源:互联网 发布:现任淘宝网总裁是谁 编辑:程序博客网 时间:2024/06/04 19:53
Given a list of airline tickets represented by pairs of departure and arrival airports [from, to]
, reconstruct the itinerary in order. All of the tickets belong to a man who departs from JFK
. Thus, the itinerary must begin with JFK
.
Note:
- If there are multiple valid itineraries, you should return the itinerary that has the smallest lexical order when read as a single string. For example, the itinerary
["JFK", "LGA"]
has a smaller lexical order than["JFK", "LGB"]
. - All airports are represented by three capital letters (IATA code).
- You may assume all tickets form at least one valid itinerary.
Example 1:tickets
= [["MUC", "LHR"], ["JFK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]]
Return ["JFK", "MUC", "LHR", "SFO", "SJC"]
.
Example 2:tickets
= [["JFK","SFO"],["JFK","ATL"],["SFO","ATL"],["ATL","JFK"],["ATL","SFO"]]
Return ["JFK","ATL","JFK","SFO","ATL","SFO"]
.
Another possible reconstruction is ["JFK","SFO","ATL","JFK","ATL","SFO"]
. But it is larger in lexical order.
题意&解题思路
给一堆飞机票,把所有机票按最小字典序连起来输出(必须用上所有tickets,并且第一张一定为"JFK")。将机票对作为有向图的边建图,再对各点邻接表连接的目的地按字典序排个序。然后用深搜从"JFK"开始对图进行搜索,目的地从小到大搜。当搜到第一条用上所有机票的路径,就直接返回,不再往下搜索。
class Solution {public: struct node{ string str; int vis; }; static bool myCompare(const node& v1, const node& v2){ return v1.str < v2.str; } int flag; vector<string>ans; map<string, int>ha; void dfs(int cur, int step, int ansLen, vector<node>* linkList){ if(flag)return; if(step == ansLen){ flag = 1; return; } for(int i = 0; i < linkList[cur].size(); i++){ if(!linkList[cur][i].vis){ linkList[cur][i].vis = 1; ans.push_back(linkList[cur][i].str); dfs(ha[linkList[cur][i].str], step + 1, ansLen, linkList); if(flag)return; ans.pop_back(); linkList[cur][i].vis = 0; } } } vector<string> findItinerary(vector<pair<string, string>> tickets) { int ansLen = tickets.size(); vector<node>linkList[ansLen + 2]; int ind = 1; for(int i = 0; i < ansLen; i++){ string head = tickets[i].first; string next = tickets[i].second; if(!ha[head])ha[head] = ind++; if(!ha[next])ha[next] = ind++; node tmp; tmp.str = next; tmp.vis = 0; linkList[ha[head]].push_back(tmp); } for(int i = 1; i < ind; i++){ sort(linkList[i].begin(), linkList[i].end(), myCompare); } flag = 0; int st = ha["JFK"]; ans.push_back("JFK"); dfs(st, 0, ansLen, linkList); return ans; }};
- *[LeetCode]332. Reconstruct Itinerary
- leetcode 332. Reconstruct Itinerary
- LeetCode *** 332. Reconstruct Itinerary
- LeetCode 332. Reconstruct Itinerary
- leetcode 332. Reconstruct Itinerary
- [leetcode] 332. Reconstruct Itinerary
- Leetcode 332. Reconstruct Itinerary
- Leetcode 332. Reconstruct Itinerary
- Leetcode 332. Reconstruct Itinerary
- [LeetCode]332. Reconstruct Itinerary
- Leetcode: 332.Reconstruct Itinerary
- leetcode:332. Reconstruct Itinerary
- LeetCode 332. Reconstruct Itinerary
- [leetcode]332. Reconstruct Itinerary
- [LeetCode] 332. Reconstruct Itinerary
- leetcode 332. Reconstruct Itinerary
- [LeetCode]332. Reconstruct Itinerary
- LeetCode 332. Reconstruct Itinerary【medium】
- centos下安装python2.7.3
- 用数组实现快速排序(C++)
- Android混合开发之WebView与Javascript交互
- SAP 物料组数据显示不完整
- XML内嵌架构模式转换为普通数据文件
- leetcode:332. Reconstruct Itinerary
- 如何衡量前端开发人员技能的重要指标,会不断补充的。
- PHP 接口2
- Redis 中的事务
- uboot 环境变量
- IntelliJ IDEA 常用设置讲解
- C++容器学习笔记1——模版、迭代器
- JS 阻止冒泡与阻止默认事件
- 北邮OJ-104. 912星球的研究生-11计院上机B