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

C++で指定された遷移を介して最後に到達することが可能かどうかを確認します


x軸上にn個のポイントがあり、ポイント間の許可された平行移動のリストがあるとします。これらのトランザクションのみを介して、開始点から終了に到達できるかどうかを確認します。したがって、点x1とx2の間に平行移動がある場合は、点xからx1とx2の間の任意の中間点に移動するか、直接x2に移動できます。したがって、n =5の場合、トランザクションは0から2、2から4、および3から5になります。その場合、出力はYESになります。 0→2→3→5からのパスがあります。

ペアの最初の要素に従ってリストを並べ替える必要があります。次に、リストの2番目のペアから開始し、ペアの最初の要素が前のペアの2番目の要素と現在のペアの2番目の要素の間にあるかどうかを確認します。この条件は、2つの連続するペアの間にパスがあるかどうかを確認するために使用されます。最後に、到達したポイントが目的のポイントであり、開始したポイントが開始ポイントであるかどうかを確認します。そうである場合はYESを表示し、そうでない場合はNOを表示します。

#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
bool isPathPairFound(int n, vector<pair<int, int> > array) {
   sort(array.begin(),array.end());
   int start_point = array[0].first;
   int end_point=array[0].second;
   for (int i=1; i<n; i++) {
      if (array[i].first > end_point)
         break;
      end_point=max(end_point,array[i].second);
   }
   return (n <= end_point && start_point==0);
}
int main() {
   vector<pair<int, int> > array;
   array.push_back(make_pair(0,2));
   array.push_back(make_pair(2,4));
   array.push_back(make_pair(3,5));
   if (isPathPairFound(5,array))
      cout << "Path has found";
   else
      cout << "NO Path has found";
}

出力

Path has found

  1. C++のグリッドで指定された方向に可能な移動をカウントします

    サイズnxmのグリッドと開始点x、yを表す2つの変数nとmです。 また、移動((1,1)、(2,2))などとしてグリッド内を移動するために実行できるステップ/移動のペアも指定されます。移動の各ペアは、x、y軸で実行されるステップの単位を表します。目標は、境界[1、n] X [1、m]内のグリッド内をトラバースするために実行できる合計ステップを見つけることです。nが5、mが4、現在の位置が2、2で、選択されたステップが( 1、-1)次に、このステップを1回実行すると、(3,1)になります。このステップを再度実行すると、(4、-1)になります。これは、-1が範囲外であるため無効です。 例

  2. C++で指定された配列の要素の階乗のGCDを検索します

    N個の要素を持つ配列Aがあるとします。配列のすべての要素の階乗のGCDを見つける必要があります。要素が{3、4、8、6}であるとすると、階乗のGCDは6です。ここでトリックを確認します。 2つの数値のGCDは、両方の数値を除算する最大の数値であるため、2つの数値の階乗のGCDは、最小の数値自体の階乗の値です。だから3の公約数!と5! 3です! =6. 例 #include <iostream> using namespace std; long fact(int n){    if(n <= 1)       return