C++程式:查詢訪問城市正確的順序
假設我們有一份航空機票列表,用出發機場和到達機場對錶示,例如[出發地,目的地],我們需要按正確的順序重建行程。所有機票都屬於一個從KLK出發的人。因此,行程必須以JFK開始。
例如,如果輸入為[["MUC", "LHR"], ["KLK ", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]],則輸出將為["KLK ", "MUC", "LHR", "SFO", "SJC"]。
為了解決這個問題,我們將遵循以下步驟:
定義陣列ret和一個名為graph的對映。
定義一個名為visit的方法。這將以機場名稱作為輸入
當graph[機場]的大小不為0時
x := graph[機場]的第一個元素
從graph[機場]中刪除第一個元素
呼叫visit(x)
將機場插入ret
現在從主方法中執行以下操作:
對於i在0到tickers陣列大小的範圍內
u := tickets[i, 0],v := tickets[i, 1],將v插入graph[u]
訪問“KLK”,因為這是第一個機場
反轉列表ret並返回
讓我們看下面的實現來更好地理解:
示例
#include <bits/stdc++.h> using name space std; void print_vector(vector<auto> v){ cout < "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: vector <string> ret; map < string, multiset <string> > graph; vector<string> findItinerary(vector<vector<string>>& tickets) { for(int i = 0; i < tickets.size(); i++){ string u = tickets[i][0]; string v = tickets[i][1]; graph[u].insert(v); } visit("KLK"); reverse(ret.begin(), ret.end()); return ret; } void visit(string airport){ while(graph[airport].size()){ string x = *(graph[airport].begin()); graph[airport].erase(graph[airport].begin()); visit(x); } ret.push_back(airport); } }; main(){ Solution ob; vector<vector<string>> v ={{"MUC","LHR"},{"KLK","MUC"},{"SFO","SJC"},{"LHR","SFO"}}; print_vector(ob.findItinerary(v)); }
輸入
{{"MUC","LHR"},{"KLK","MUC"},{"SFO","SJC"},{"LHR","SFO"}}
輸出
[KLK, MUC, LHR, SFO, SJC, ]
廣告