Имеется ориентированный граф. Найти в графе вершину(ны), из которой(ых) достижимы все остальные.
Задача решается возведением в степень исходной матрицы смежности.
Кажется, что это неправильная переформулировка. Ведь все вершины должны быть достижимы не просто так, а по одному и тому же "пути". Путь - это номера рёбер, которые нужно выбирать на каждом шаге. Рёбра
из каждой вершины (или
в каждую вершину, если мы уже развернули задачу) пронумерованы.
Задачу о просто вершине, из которой достижимы все остальные, можно решать безо всяких матриц поиском в глубину (найти компоненты связности или компоненты сильной связности в зависимости от того, ориентированный ли граф).
-- Сб янв 09, 2016 02:41:48 --В целом есть две мысли.
1. Идти и склеивать вершины. Пусть мы изначально стоим во всех вершинах одновременно. Сделаем, например, из каждой ход по ребру номер 123. Множество вершин, в которых мы сейчас могли оказаться, явно не увеличилось. Возможно, уменьшилось.
Дальше из нового множества вершин делаем ход по ребру номер 23456. Получилось следующее множество вершин, где мы могли оказаться, которое опять не больше предыдущего.
Если вершины "склеились", они во всём дальнейшем пути так и останутся склеенными.
Осталось понять, могли ли мы при этом ошибиться - то есть сделать ход из всех вершин по такому ребру, что дальше не получится их склеить. Если не могли, то из этого делается полиномиальное решение: нужно всего лишь научиться любым образом уменьшать размер множества хотя бы на единицу за полином.
Аналогично можно идти с конца и расклеивать одну исходную вершину на много, пока не получим все.
2. Построить матрицу переходов за 2, 3, 4, ... шага. Или за 2, 4, 8, ... шагов.
Хочется понять, что такое матрица переходов за два шага. Понятно, что можно построить матрицу
, в которой для каждой начальной вершины и для каждой пары номеров рёбер указать, куда мы попали. Но хочется уместить это в матрицу
, не потеряв полезную для задачи информацию.
Если это возможно, решение будет такое: найти матрицу переходов за какое-нибудь большое число шагов, а потом доказать, что такого количества шагов точно хватит.