Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

C++에서 방문한 도시의 올바른 순서를 찾는 프로그램

<시간/>

[from, to]와 같은 출발 및 도착 공항 쌍으로 표시되는 항공권 목록이 있다고 가정하면 여정을 올바른 순서로 재구성해야 합니다. 모든 티켓은 KLK에서 출발하는 남성의 것입니다. 따라서 여정은 JFK로 시작해야 합니다.

따라서 입력이 [["MUC", "LHR"], ["KLK", "MUC"], ["SFO", "SJC"], ["LHR", "SFO"]]인 경우 출력은 ["KLK", "MUC", "LHR", "SFO", "SJC"]입니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 배열 ret와 graph라는 맵을 정의합니다.

  • 방문이라는 메소드를 정의하십시오. 공항 이름을 입력으로 사용합니다.

  • 그래프[공항]의 크기가 0이 아닌 동안

    • x :=그래프[공항]의 첫 번째 요소

    • 그래프[공항]에서 첫 번째 요소 삭제

    • 전화 방문(x)

  • ret에 공항 삽입

  • 이제 주요 방법에서 다음을 수행하십시오 -

  • 범위 0에서 시세 배열 크기까지의 i에 대해

    • u :=티켓[i, 0], v :=티켓[i, 1], 그래프에 v 삽입[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, ]