Я реализовал этот псевдокод в своей программе, чтобы проверить, является ли ориентированный граф ацикличным:
L ← Empty list that will contain the sorted elements
S ← Set of all nodes with no incoming edges
while S is non-empty do
remove a node n from S
add n to tail of L
for each node m with an edge e from n to m do
remove edge e from the graph
if m has no other incoming edges then
insert m into S
if graph has edges then
return error (graph has at least one cycle)
else
return L (a topologically sorted order)
Это отлично работает, но мне также нужно вывести фактический цикл, если график не ациклический. Можно ли сделать это «внутри» этого кода или мне нужно полностью изменить алгоритм? Я попытался найти решение и нашел этот ответ (Печать (не обнаруживает) цикл с топологической сортировкой), но я не могу понять, как это сделать. У кого-нибудь есть псевдокод, который мог бы мне помочь?