125просмотров
8.7%от подписчиков
11 марта 2026 г.
statsScore: 138
Задача: 1059. All Paths from Source Lead to Destination
Сложность: medium Учитывая ребра направленного графа, где edges[i] = [ai, bi] указывает на наличие ребра между вершинами ai и bi, и две вершины source и destination этого графа, определите, все ли пути, начинающиеся из source, заканчиваются в destination, то есть: существует ли хотя бы один путь из source в destination Если существует путь из source в node без исходящих ребер, то этот node равен destination. Количество возможных путей из source в destination - конечное число. Верните true тогда и только тогда, когда все пути из source ведут в destination. Пример:
Input: n = 3, edges = [[0,1],[0,2]], source = 0, destination = 2
Output: false 👨💻 Алгоритм: 1⃣Построение графа и проверка путей:
Построить граф на основе входных данных.
Использовать поиск в глубину (DFS) для проверки наличия всех путей от вершины source до вершины destination. 2⃣Проверка конечности путей:
Проверить, что из всех вершин, достижимых от source, либо исходят ребра, либо они являются вершиной destination.
Убедиться, что из любой вершины, не являющейся destination, исходят хотя бы одно ребро. 3⃣Рекурсивная проверка конечности путей:
Рекурсивно проверять, что все пути из source заканчиваются в destination, избегая циклов и проверяя конечность всех путей. 😎 Решение:
function leadsToDestination($n, $edges, $source, $destination) { $graph = []; foreach ($edges as $edge) { $graph[$edge[0]][] = $edge[1]; } $visited = array_fill(0, $n, 0); function dfs($node, $graph, &$visited, $destination) { if ($visited[$node] != 0) return $visited[$node] == 2; if (!isset($graph[$node])) return $node == $destination; $visited[$node] = 1; foreach ($graph[$node] as $neighbor) { if (!dfs($neighbor, $graph, $visited, $destination)) return false; } $visited[$node] = 2; return true; } return dfs($source, $graph, $visited, $destination);
} Ставь 👍 и забирай 📚 Базу знаний