1462. Jadual Kursus IV
Kesukaran: Medium
Topik: carian kedalaman-pertama, carian lebar-pertama, graf, jenis topologi
Terdapat sejumlah kursus numcourses yang perlu anda ambil, dilabelkan dari 0 hingga numcourses - 1. ] menunjukkan bahawa anda mesti mengambil kursus A i pertama jika anda ingin mengambil kursus b i . Contohnya, pasangan [0, 1] menunjukkan bahawa anda perlu mengambil kursus 0 sebelum anda boleh mengambil kursus 1.
anda juga diberi pertanyaan array di mana pertanyaan [j] = [u j , v j adalah prasyarat tentu saja v j atau tidak.
kembali Jawapan array boolean, di mana jawapan [j] adalah jawapan kepada J th pertanyaan .
Contoh 1:
input: output:
output: [false, false] numCourses = 3, prasyarat = [[1,2], [1,0], [2,0]], queries = [[1,0], [1,2]]
[true, true]
0 & lt; = a i Penyelesaian: kita boleh menggunakan perwakilan graf dan algoritma Floyd-Warshall untuk mengira sama ada setiap kursus dapat dicapai dari kursus lain. Pendekatan ini dengan cekap akan mengendalikan hubungan prasyarat dan membolehkan kita menjawab pertanyaan secara langsung.
mari kita melaksanakan penyelesaian ini dalam php:
Kami mengisi array $ isreachable berdasarkan prasyarat. Untuk setiap prasyarat [a, b], kursus mesti diambil sebelum kursus b.
Algoritma ini mengira penutupan transitif graf.
setiap pertanyaan [u, v] dijawab dengan hanya memeriksa nilai $ isreachable [u] [v].
Jika anda mendapati siri ini membantu, sila pertimbangkan untuk memberikan repositori bintang di GitHub atau berkongsi jawatan di rangkaian sosial kegemaran anda? Sokongan anda sangat bermakna bagi saya! Jika anda mahukan kandungan yang lebih berguna seperti ini, jangan ragu untuk mengikuti saya:
LinkedIn
[false, true]
input:
prasyarat [i] .length == 2 i
<?php /**
* @param Integer $numCourses
* @param Integer[][] $prerequisites
* @param Integer[][] $queries
* @return Boolean[]
*/
function checkIfPrerequisite($numCourses, $prerequisites, $queries) {
...
...
...
/**
* go to ./solution.php
*/
}
// Example usage:
$numCourses = 2;
$prerequisites = [[1,0]];
$queries = [[0,1],[1,0]];
$result = checkIfPrerequisite($numCourses, $prerequisites, $queries);
print_r($result); // Output: [false,true]
$numCourses = 2;
$prerequisites = [];
$queries = [[1,0],[0,1]]
$result = checkIfPrerequisite($numCourses, $prerequisites, $queries);
print_r($result); // Output: [false,false]
$numCourses = 3;
$prerequisites = [[1, 2], [1, 0], [2, 0]];
$queries = [[1, 0], [1, 2]];
$result = checkIfPrerequisite($numCourses, $prerequisites, $queries);
print_r($result); // Output: [true, true]
?>
algoritma Floyd-Warshall:
Penilaian pertanyaan:
kerumitan masa:
3
2
Pelaksanaan:
$numCourses = 3;
$prerequisites = [[1, 2], [1, 0], [2, 0]];
$queries = [[1, 0], [1, 2]];
$isReachable = [
[false, false, false],
[false, false, true],
[false, false, false]
];
$isReachable = [
[false, false, false],
[true, false, true],
[true, false, false]
];
Pautan kenalan
[true, true]
Atas ialah kandungan terperinci Jadual Kursus IV. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!