1368. Kos Minimum untuk Membuat Sekurang-kurangnya Satu Laluan Sah dalam Grid
Kesukaran: Sukar
Topik: Tatasusunan, Keluasan Carian Pertama, Graf, Timbunan (Baris Gilir Keutamaan), Matriks, Laluan Terpendek
Diberi grid m x n. Setiap sel grid mempunyai tanda yang menunjuk ke sel seterusnya yang perlu anda lawati jika anda berada dalam sel ini. Tanda grid[i][j] boleh menjadi:
Perhatikan bahawa mungkin terdapat beberapa tanda pada sel grid yang menghala ke luar grid.
Anda pada mulanya akan bermula pada sel kiri atas (0, 0). Laluan yang sah dalam grid ialah laluan yang bermula dari sel kiri atas (0, 0) dan berakhir di bahagian bawah sebelah kanan sel (m - 1, n - 1) mengikut tanda pada grid. Laluan yang sah tidak semestinya yang terpendek.
Anda boleh mengubah suai tanda pada sel dengan kos = 1. Anda boleh mengubah suai tanda pada sel sekali sahaja.
Pulangan kos minimum untuk menjadikan grid mempunyai sekurang-kurangnya satu laluan yang sah.
Contoh 1:
Contoh 2:
Contoh 3:
Kekangan:
Petunjuk:
Penyelesaian:
Kita boleh menggunakan pendekatan 0-1 BFS. Ideanya adalah untuk melintasi grid menggunakan deque (baris bersambung dua) di mana kos mengubah suai arah menentukan sama ada sel ditambah ke hadapan atau belakang deque. Grid dianggap sebagai graf di mana setiap sel mempunyai tepi berwajaran berdasarkan sama ada arah semasanya sepadan dengan pergerakan dengan jirannya.
Mari laksanakan penyelesaian ini dalam PHP: 1368. Kos Minimum untuk Membuat Sekurang-kurangnya Satu Laluan Sah dalam Grid
<?php /** * @param Integer[][] $grid * @return Integer */ function minCost($grid) { ... ... ... /** * go to ./solution.php */ } // Example Test Cases $Kos Minimum untuk Membuat Sekurang-kurangnya Satu Laluan Sah dalam Grid = [[1,1,1,1],[2,2,2,2],[1,1,1,1],[2,2,2,2]]; echo minCost($Kos Minimum untuk Membuat Sekurang-kurangnya Satu Laluan Sah dalam Grid) . "\n"; // Output: 3 $Kos Minimum untuk Membuat Sekurang-kurangnya Satu Laluan Sah dalam Grid = [[1,1,3],[3,2,2],[1,1,4]]; echo minCost($Kos Minimum untuk Membuat Sekurang-kurangnya Satu Laluan Sah dalam Grid) . "\n"; // Output: 0 $Kos Minimum untuk Membuat Sekurang-kurangnya Satu Laluan Sah dalam Grid = [[1,2],[4,3]]; echo minCost($Kos Minimum untuk Membuat Sekurang-kurangnya Satu Laluan Sah dalam Grid) . "\n"; // Output: 1 ?>
Pemetaan Arah: Setiap arah (1 untuk kanan, 2 untuk kiri, 3 untuk bawah, 4 untuk atas) dipetakan kepada tatasusunan delta pergerakan [dx, dy].
0-1 BFS:
Susun Jarak: Tatasusunan 2D $dist menjejaki kos minimum untuk mencapai setiap sel. Ia dimulakan dengan PHP_INT_MAX untuk semua sel kecuali sel permulaan (0, 0).
Berat Tepi:
Penamatan: Gelung ditamatkan sebaik sahaja semua sel telah diproses. Hasilnya ialah nilai dalam $dist[$m - 1][$n - 1], mewakili kos minimum untuk mencapai sudut kanan bawah.
Pautan Kenalan
Jika anda mendapati siri ini membantu, sila pertimbangkan untuk memberi repositori bintang di GitHub atau berkongsi siaran pada rangkaian sosial kegemaran anda ?. Sokongan anda amat bermakna bagi saya!
Jika anda mahukan kandungan yang lebih berguna seperti ini, sila ikuti saya:
Atas ialah kandungan terperinci Kos Minimum untuk Membuat Sekurang-kurangnya Satu Laluan Sah dalam Grid. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!