Задача №98. Есть ли цикл?
Контест на DFS и его применения
Разбор добавил Джафар Исхоков
Применим алгоритм Флойда. Храним в массиве a[60][60] матрицу смежности ориентированного графа.
Храним таким образом: если в a[i,j] = 1, то a[i,j] присвоим -10 , а если оно равно 0, то
присваиваем ему 1000000. Теперь запустим алгоритм Флойда. Для тех, кто не знает, напомню, как
он выглядит:
for k := 1 to n do
for i := 1 to n do
for j := 1 to n do
if a[i,j] > a[i,k] + a[k,j] then
a[i,j] := a[i,k] + a[k,j];
где n – число вершин в графе. Теперь проверяем, есть ли элемент a[i,i], который меньше 0. Если он есть, то в графе имеется цикл, а если его нет, то в графе цикла нет. Желаю удачи ;)
Сдать: для сдачи задач необходимо войти в систему
3214
statement