C++で2点間の最短距離を見つけるプログラム
各要素が[x、y]の形式であり、ユークリッド座標を表す座標のリストがあるとします。最小の二乗距離(x 1 )を見つける必要があります -x 2 ) 2 +(y 1 -y 2 ) 2 提供された任意の2つの座標間。
したがって、入力が座標={{1、2}、{1、4}、{3、5}}のような場合、出力は4になります。
これを解決するには、次の手順に従います-
-
1つのマップを定義しますytorightmostx
-
配列座標を並べ替える
-
ret:=無限大
-
座標の各pについて-
-
it =(p [1] --sqrt(ret))がytorightmostxにある値、またはytorightmostxからのそれよりも大きい最小値を返します
-
ytorightmostxの最後の要素と等しくありませんが、-
を実行します。-
yd:=最初-そのp[1]
-
yd>0かつyd*yd> =retの場合、-
-
ループから出てきます
-
-
nxt =it
-
nxtを1増やします
-
ret:=最小値(ret、dist(p [0]、p [1]、最初の値、2番目の値)
-
xd:=その2番目の値-p [0]
-
xd * xd> =retの場合、-
-
ytorightmostxから削除します
-
-
it:=nxt
-
-
ytorightmostx [p [1]]:=p [0]
-
-
retを返す
-
関数dist()を定義します。これには、xl、yl、xr、yrが必要です。
-
xd:=xl --xr
-
yd:=yl --yr
-
xd * xd + yd*ydを返す
-
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; long long dist(long long xl, long long yl, long long xr, long long yr) { long long xd = xl - xr; long long yd = yl - yr; return xd * xd + yd * yd; } int solve(vector<vector<int>>& coordinates) { map<long long, long long> ytorightmostx; sort(coordinates.begin(), coordinates.end()); long long ret = 1e18; for (auto& p : coordinates) { auto it = ytorightmostx.lower_bound(p[1] - sqrt(ret)); while (it != ytorightmostx.end()) { long long yd = it->first - p[1]; if (yd > 0 && yd * yd >= ret) { break; } auto nxt = it; nxt++; ret = min(ret, dist(p[0], p[1], it->second, it->first)); long long xd = (it->second - p[0]); if (xd * xd >= ret) { ytorightmostx.erase(it); } it = nxt; } ytorightmostx[p[1]] = p[0]; } return ret; } int main(){ vector<vector<int>> coord = {{1, 2},{1, 4},{3, 5}}; cout << solve(coord) << endl; return 0; }
入力
{{1, 2},{1, 4},{3, 5}}
出力
4
-
C++で平行四辺形の面積を見つけるプログラム
この問題では、平行四辺形の底と高さを表す2つの値が与えられます。私たちのタスクは、C++で平行四辺形の領域を見つけるプログラムを作成することです。 平行四辺形 は、反対側が等しく平行な4辺の閉じた図形です。 問題を理解するために例を見てみましょう 入力 B = 20, H = 15 出力 300 説明 平行四辺形の面積=B* H =20 * 15 =300 ソリューションアプローチ この問題を解決するために、平行四辺形の面積の幾何学的公式を使用します。 Area = base * height. ソリューションの動作を説明するプログラム 例 #include <io
-
C++で二分木の2つのノード間の距離を見つける
ノードが少ない二分木があると考えてください。 2つのノードuとvの間の距離を見つける必要があります。ツリーが次のようになっていると仮定します- これで、(4、6)=4の間の距離、パスの長さは4、(5、8)の間の長さ=5などになります。 この問題を解決するために、LCA(Lowest Common Ancestor)を見つけてから、LCAから2つのノードまでの距離を計算します。 例 #include<iostream> using namespace std; class Node { public: in