Python
 Computer >> コンピューター >  >> プログラミング >> Python

C++で訪問した都市の正しい順序を見つけるためのプログラム


[from、to]のような出発空港と到着空港のペアで表される航空券のリストがあるとすると、旅程を正しい順序で再構築する必要があります。すべてのチケットは、KLKを出発する男性のものです。したがって、旅程はJFKで始まる必要があります。

したがって、入力が[["MUC"、 "LHR"]、["KLK"、 "MUC"]、["SFO"、 "SJC"]、["LHR"、 "SFO"]]の場合、出力は["KLK"、 "MUC"、 "LHR"、 "SFO"、"SJC"]になります。

これを解決するには、次の手順に従います-

  • 配列retとグラフと呼ばれるマップを定義します。

  • visitというメソッドを定義します。これは入力として空港名を取ります

  • グラフ[空港]のサイズが0ではない場合

    • x:=グラフの最初の要素[空港]

    • グラフから最初の要素を削除します[空港]

    • コールvisit(x)

  • 空港をretに挿入

  • ここで、mainメソッドから、次のようにします-

  • 0からティッカー配列のサイズまでの範囲のiの場合

    • u:=チケット[i、0]、v:=チケット[i、1]、グラフにvを挿入[u]

  • これが最初の空港なので、visit( "KLK")

  • リストを逆にして戻る

理解を深めるために、次の実装を見てみましょう-

#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, ]

  1. C++で線の中点を見つけるプログラム

    この問題では、線の始点と終点の2つの点AとBが与えられます。私たちの仕事は、C++で線の中点を見つけるプログラムを作成することです。 問題の説明 −ここでは、開始点と終了点がA(x1、y1)とB(x2、y2)の線があります。そして、線の中点を見つける必要があります。 問題を理解するために例を見てみましょう 入力 a(x1, y1) = (4, -5) b(x2, y2) = (-2, 6) 出力 (1, 0.5) 説明 (x1 + x2)/2 = 4 - 2 / 2 = 1 (y1 + y2)/2 = -5 + 6 / 2 = 0.5 ソリューションアプローチ この問題を解決する

  2. C++で三角形の図心を見つけるプログラム

    この問題では、三角形の3つの頂点の座標を示す2D配列が与えられます。私たちのタスクは、C++で三角形のセントロイドを見つけるプログラムを作成することです。 セントロイド 三角形の3つの中央値は、三角形の3つの中央値が交差する点です。 中央値 三角形の頂点は、三角形の頂点とその反対側の線の中心点を結ぶ線です。 問題を理解するために例を見てみましょう 入力 (-3, 1), (1.5, 0), (-3, -4) 出力 (-3.5, -1) 説明 Centroid (x, y) = ((-3+2.5-3)/3, (1 + 0 - 4)/3) = (-3.5, -1) ソリューションアプロ