Края могут быть классифицированы по трем категориям (задний край, дерево/передний край, перекрестный край) с использованием рекурсивной DFS, которая маркирует узлы как невидимые, обнаруженные или завершенные (или белые, серые, черные).Классификация края в итеративном режиме DFS
Можно ли также классифицировать ребра, используя итеративную версию алгоритма (см. Depth-First Search)?
procedure DFS-iterative(G,v):
2 let S be a stack
3 S.push(v)
4 while S is not empty
5 v = S.pop()
6 if v is not labeled as discovered:
7 label v as discovered
8 for all edges from v to w in G.adjacentEdges(v) do
9 S.push(w)
В этой версии используются только две категории: нераскрытые и обнаруженные. Мы могли бы отметить, что узел завершен после того, как все соседние узлы были перенесены в стек, но это не даст ожидаемого результата.
EDIT (уточнение): Вопрос в том, можем ли мы изменить итеративную версию DFS, приведенную выше, чтобы классифицировать ребра как дерево/переднее кромку, перекрестный край и задний край, как это обычно делается с рекурсивной версией используя ярлык/цвет узла?
Я не уверен, в чем ваш вопрос. Не могли бы вы переписать его, пожалуйста? – xenteros
Вы также можете указать определение категорий. – Yerken
Насколько я понимаю, определение категорий выглядит следующим образом: [https://en.wikipedia.org/wiki/Depth-first_search]: _forward edge_ указывает на узел дерева на один из его потомки, _back edge_ указывают от узла к одному из его предков, а _cross edge_ не делают ни – Codor