1368年。グリッド内に少なくとも 1 つの有効なパスを作成するための最小コスト
難易度: 難しい
トピック: 配列、幅優先検索、グラフ、ヒープ (優先キュー)、行列、最短パス
m x n グリッドが与えられます。グリッドの各セルには、現在このセルにいる場合に訪問する必要がある次のセルを示す標識があります。 Grid[i][j] の符号は次のとおりです:
グリッドのセル上には、グリッドの外側を指すいくつかの標識がある可能性があることに注意してください。
最初は左上のセル (0, 0) から開始します。グリッド内の有効なパスは、グリッド上の記号に従って、左上のセル (0, 0) から始まり右下のセル (m - 1, n - 1) で終わるパスです。有効なパスは最短である必要はありません。
コスト = 1 のセルの符号を変更できます。セルの符号は 1 回のみ変更できます。
グリッドに少なくとも 1 つの有効なパスを持たせるための最小コストを返します。
例 1:
例 2:
例 3:
制約:
ヒント:
解決策:
0-1 BFS アプローチを使用できます。このアイデアは、デキュー (両端キュー) を使用してグリッドを横断することです。方向を変更するコストによって、セルがデキューの前に追加されるか後ろに追加されるかが決まります。グリッドは、現在の方向が隣接するセルの動きと一致するかどうかに基づいて、各セルに重み付けされたエッジを持つグラフとして扱われます。
このソリューションを PHP で実装してみましょう: 1368。グリッド内に少なくとも 1 つの有効なパスを作成するための最小コスト
<?php /** * @param Integer[][] $grid * @return Integer */ function minCost($grid) { ... ... ... /** * go to ./solution.php */ } // Example Test Cases $グリッド内に少なくとも 1 つの有効なパスを作成するための最小コスト = [[1,1,1,1],[2,2,2,2],[1,1,1,1],[2,2,2,2]]; echo minCost($グリッド内に少なくとも 1 つの有効なパスを作成するための最小コスト) . "\n"; // Output: 3 $グリッド内に少なくとも 1 つの有効なパスを作成するための最小コスト = [[1,1,3],[3,2,2],[1,1,4]]; echo minCost($グリッド内に少なくとも 1 つの有効なパスを作成するための最小コスト) . "\n"; // Output: 0 $グリッド内に少なくとも 1 つの有効なパスを作成するための最小コスト = [[1,2],[4,3]]; echo minCost($グリッド内に少なくとも 1 つの有効なパスを作成するための最小コスト) . "\n"; // Output: 1 ?>
方向マッピング: 各方向 (1 は右、2 は左、3 は下、4 は上) は、移動デルタ [dx, dy] の配列にマッピングされます。
0-1 BFS:
距離配列: 2D 配列 $dist は、各セルに到達するための最小コストを追跡します。開始セル (0, 0) を除くすべてのセルに対して PHP_INT_MAX で初期化されます。
エッジの重み:
終了: すべてのセルが処理されるとループは終了します。結果は $dist[$m - 1][$n - 1] の値で、右下隅に到達するまでの最小コストを表します。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!
このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上がグリッド内に少なくとも 1 つの有効なパスを作成するための最小コストの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。