аналогична проблеме поиска минимального набора вершин на направленном графике, из которого можно достичь всех вершин, , за исключением того, что узел должен быть его предшественники, чтобы быть достигнутыми. На направленный график G. Узел n of g, как говорят, достижимый из s , если и только тогда, когда N принадлежит к S или если все предшественники n доступны из S.
Мы скажем, что S Generator , если все, что можно, мы всегда достижимы для S.
, мы не уверены, что I. (т.е. набор, содержащий все узлы, всегда будет работать). < /p>
Вопрос состоит в том, чтобы разработать алгоритм, который возвращает генератор минимальной длины G, данный график g. < /p>
Пример < /h3>
. Разблокирует 2, {2,3} Разблокирует 5 и {1,3,6} разблокирует 4. < /p>
Теперь, если вы возьмете S = {1,5}, узлы 3, 4 и 6 останутся недоступными. Поэтому S не является генератором этого графа. < /P>
На самом деле, мы видим, что, если S является генератором, каждый цикл графика должен содержать хотя бы один узел в s. < /P>
моя попытка спроектировать алгоритм (пропустить эту часть, если это слишком долго; (почти минимальные?) Наборы, учитывая график G.
Идея, с учетом узла n, для создания своего рода «дерева зависимости», листья которого образуют набор, из которого n достижимый. Чтобы построить дерево зависимостей, нам нужно добавить предшественники N, затем все предшественники предшественников, и т. Д., Пока не будет обнаружено никаких новых узлов. Итак, ради удобства мы вернем хэш -таблицу, которая связывает обнаруженные узлы с их деревьями зависимости. < /P>
Код: Выделить всё
Algorithm: DependencyTree
Inputs: G (a graph), n (a node of G)
Outputs: a hash table mapping the nodes discovered to their dependency trees
sub_trees
Подробнее здесь: [url]https://stackoverflow.com/questions/79539620/the-problem-of-reachability-in-a-directed-graph-but-all-predecessors-must-be-re[/url]