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

ロボットが最終位置に到達するまでの最小ステップ数を求めるC++プログラム


2つの座標 (x1, y1) と (x2, y2) があるとします。ロボットは現在点 (x1, y1) にいて、点 (x2, y2) へ移動したいと考えています。ロボットは1ステップごとに、周囲8方向(上下左右と斜め)の隣接するマスのいずれかに移動することができます。このとき、最終位置に到達するために必要な最小ステップ数を求めます。

例えば、入力が x1 = 3; y1 = 4; x2 = 6; y2 = 1; の場合、出力は 3 になります。その様子は以下の図の通りです。

ロボットが最終位置に到達するまでの最小ステップ数を求めるC++プログラム

解き方

この問題を解くには、次のステップに従います。

return max(|x2 - x1|, |y2 - y1|)

なぜこれで正しく求まるのか

ロボットは8方向に移動できるため、1ステップでX方向とY方向の両方を同時に1マスずつ進むことが可能です。したがって、必要なステップ数はX方向の移動距離 |x2 − x1| とY方向の移動距離 |y2 − y1| のうち大きい方に一致します。これは「チェビシェフ距離」として知られる考え方で、斜め移動が許可されているグリッド上の最短経路問題ではよく使われる手法です。

実装例

理解を深めるために、以下のC++コードを見てみましょう。

#include <bits/stdc++.h>
using namespace std;
int solve(int x1, int y1, int x2, int y2){
    return max(abs(x2 - x1), abs(y2 - y1));
}
int main(){
    int x1 = 3;
    int y1 = 4;
    int x2 = 6;
    int y2 = 1;
    cout << solve(x1, y1, x2, y2) << endl;
}

入力

3, 4, 6, 1

出力

3
  1. C++で平面内に形成できる平行四辺形の数を数えるアルゴリズム

    本記事の課題は、平面上に与えられた点集合から形成できる平行四辺形の個数を求めることです。平行四辺形とは、四角形の対辺が互いに平行であり、それに伴って対角も等しくなる四角形のことを指します。 入力 − int a[] = {0, 2, 5, 5, 2, 5, 2, 5, 2} int b[] = {0, 0, 1, 4, 3, 8, 7, 11, 10} 出力 − 平面内の平行四辺形の数 − 3 説明 − (x, y) 座標の点が与えられており、これらの点を組み合わせると、図のように 3 つの平行四辺形を形成できます。 入力 − a[] = {0, 3, 1, 4, 1, 5} b[] =

  2. C++でグレイコード(Gray Code)を生成するアルゴリズムと実装例

    グレイコード(Gray Code)とは、隣り合う2つの値が必ず1ビットだけ異なるという性質を持つ二進数体系のことです。本記事では、コードのビット数を表す非負整数 n が与えられたときに、グレイコードの列を出力する方法を解説します。グレイコードの列は必ず 0 から始まる必要があります。例えば、入力が 2 の場合、出力は [0, 1, 3, 2] となります。これは、0 のグレイコードが 00、1 が 01、2 が 11、3 が 10 であるためです。隣接する値同士を比較すると、それぞれ1ビットしか変わっていないことが確認できます。解法のアプローチこの問題は、以下の手順で解くことができます。結果を