ホームページ >バックエンド開発 >C++ >特定のソースポイントを経由して目的地に到達するために必要な文字列定義のステップを最小限に抑える

特定のソースポイントを経由して目的地に到達するために必要な文字列定義のステップを最小限に抑える

王林
王林転載
2023-09-07 08:45:101248ブラウズ

特定のソースポイントを経由して目的地に到達するために必要な文字列定義のステップを最小限に抑える

文字列が特定のソースから宛先に到達するために必要なステップ数を最小限に抑えることは、コンピューター サイエンスにおける一般的な問題です。これには、一連の方向に基づいて出発点から目的地までの最短経路を見つけることが含まれます。この記事では、C でこの問題を解決する方法を説明し、例を示し、テスト ケースについて説明します。

###問題文###

2D 平面上の開始点 (x, y) と一連の方向 (N, S, E, W) が与えられた場合、そこから開始して目的点 (x', y') までの最短経路を見つける必要があります。スタート地点から。文字列内の各文字は、移動する方向を表します。たとえば、文字列が「NNSE」の場合、北に 2 歩、南に 1 歩、東に 1 歩移動する必要があります。私たちは基本的な 4 つの方向にのみ移動でき、平面の外には移動できません。

###方法###

この問題を解決するには、開始点から開始して 2 次元平面の幅優先探索 (BFS) トラバースを実行する必要があります。横断中に、訪問した各ポイントについて、そのポイントに到達するために必要な歩数を計算する必要があります。トラバース中にターゲット ポイントに遭遇した場合、そのポイントに到達するのに必要なステップ数を返します。

###例###

次の C コードは、上記のメソッドを実装します。

リーリー ###出力### リーリー

上記のコードは、方向と開始点 (x, y) を表す文字列 s を入力として受け入れます。まず、現在点 (curr_x, curr_y) を (0, 0) に初期化し、現在点に到達するまでのステップ数 (steps) を 0 に初期化します。次に、訪問したポイントを追跡するために順序付けされていないマップを作成します。文字列 s を反復処理し、現在のポイントと、現在の文字によって指定された方向に基づいてそのポイントに到達するために必要なステップ数を更新します。現在のポイントがすでに訪問されているかどうかを確認します。その場合はスキップしてください。それ以外の場合は、訪問済みとしてマークし、現在のポイントに到達するまでのステップ数を増やします。

文字列を走査した後、ターゲット ポイントと現在のポイントの間の距離を計算します。目標点と現在点の間の距離が歩数以下で、歩数と距離の差が偶数の場合、歩数が返されます。目的地に到達するために必要な最小歩数。それ以外の場合は、宛先に到達できないことを示す -1 を返します。

テストケースの例

上記のコードがどのように機能するかを理解するためにサンプル テスト ケースを考えてみましょう -

######入力###### リーリー

このテスト ケースの例では、開始点は (0,0)、方向は「NNSE」です。目標点は(2,2)です。ただし、指定された方向に従うと、目標点ではなく、点 (0,2) に到達するだけです。したがって、指定された方向に目標点 (2,2) に到達することはできません。

###結論は###

この記事では、一連の指示に基づいて、特定の発信元から目的地に到達するために必要なステップ数を最小限に抑える方法について説明しました。 BFS トラバーサルを使用してソリューションを C で実装し、コードがどのように機能するかを示す例を提供しました。この記事で説明したアプローチに従うことで、C で同様の問題を効率的に解決できます。

以上が特定のソースポイントを経由して目的地に到達するために必要な文字列定義のステップを最小限に抑えるの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はtutorialspoint.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。