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

C++で指定されたチケットのリストから旅程を検索します


[from、to]のような出発空港と到着空港のペアで表されるチケットのリストがあるとすると、旅程を順番に見つける必要があります。チケットはすべてチェンナイを出発する男性のものです。したがって、旅程はチェンナイで始まる必要があります。

したがって、入力が[["Mumbai"、 "Kolkata"]、["Chennai"、 "Mumbai"]、["Delhi"、 "Bangalore"]、["Kolkata"、 "Delhi"]]の場合、出力は["Chennai"、 "Mumbai"、 "Kolkata"、 "Delhi"、"Bangalore"]になります。

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

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

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

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

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

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

    • コールvisit(x)

  • 空港をretに挿入

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

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

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

  • これが最初の空港なので、visit(“ Chennai”)

  • リストを逆にして戻る

例(C ++)

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

#include <bits/stdc++.h>
using namespace 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("Chennai");
      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 = {{"Mumbai", "Kolkata"}, {"Chennai", "Mumbai"}, {"Delhi", "Bangalore"}, {"Kolkata", "Delhi"}};
   print_vector(ob.findItinerary(v));
}

入力

{{"Mumbai", "Kolkata"}, {"Chennai", "Mumbai"}, {"Delhi", "Bangalore"}, {"Kolkata", "Delhi"}}

出力

[Chennai, Mumbai, Kolkata, Delhi, Bangalore, ]

  1. C ++を使用して、指定されたポイントから可能な四辺形の数を見つけます

    四辺形は、ユークリッド平面幾何学で4つの頂点と4つのエッジを持つポリゴンを形成します。名前4-gonなど。四辺形の他の名前に含まれ、正方形、表示スタイルなどとしても知られています。 この記事では、与えられた点から可能な四辺形の数を見つけるためのアプローチを説明します。この問題では、デカルト平面に提供された4つの点(x、y)を使用して作成できる四辺形の数を調べる必要があります。だからここに与えられた問題の例があります- Input : A( -2, 8 ), B( -2, 0 ), C( 6, -1 ), D( 0, 8 ) Output : 1 Explanation : One quadr

  2. C++のバイナリツリーでルートから特定のノードまでの距離を検索します

    ノードが少ない二分木があると考えてください。ルートと別のノードuの間の距離を見つける必要があります。ツリーが次のようになっているとします。 これで、(root、6)=2の間の距離、パスの長さは2、(root、8)=3の間の距離などになります。 この問題を解決するために、再帰的アプローチを使用して、左右のサブツリーでノードを検索し、各レベルの長さも更新します。 例 #include<iostream> using namespace std; class Node {    public:       int data; &