Изменения

Перейти к: навигация, поиск
Псевдокод
==Псевдокод==
Пусть <tex>G</tex> — исходный граф, <tex>H</tex> //G - —инвертированный граф , H - инвертированный . В массиве <tex>ord[],</tex> //список будем хранить номера вершин в порядке окончания обработки, поиском в глубину в графе <tex>G</tex>. В результате получаем массив <tex> component[]</tex> //, который каждой вершине сопоставляет номер её компоненты, к который относиться вершина.
'''dfsdfs1'''(<tex>v</tex>) <tex>color[v] \leftarrow 1</tex>1
'''for''' (всех <tex>i</tex> смежных с <tex>v</tex>)
'''if''' (вершина <tex>i</tex> не посещена)
'''dfsdfs1'''(<tex>G[v][i]</tex>)
Добавляем вершину <tex>v</tex> в конец списка <tex>ord</tex>
'''for''' (всех <tex>i</tex> смежных с <tex>v</tex>)
'''if''' (если вершина <tex>i</tex> еще не находится ни в какой компоненте)
'''dfs2'''(<tex>H[v][i]</tex>);
'''main'''()
'''for''' (по всем вершинам <tex>i</tex> графа <tex>G</tex>)
'''if''' (вершина <tex>i</tex> не посещена)
'''dfsdfs1'''(i); <tex>col \leftarrow 1;</tex>1 '''for''' (по всем вершинам <tex>i</tex> списка <tex>ord[]</tex> в обратном порядке) //от сохранённого в ord[], что соответствует уменьшению времени конца обработки f[]
'''if''' (если вершина <tex>i</tex> не находится ни в какой компоненте)
'''dfs2'''(<tex>i</tex>), <tex>col</tex>++; По окончании выполнения алгоритма в <tex>component[i]</tex> имеем номер компоненты, к которой принадлежит вершина <tex>i</tex>.
==Литература==
* Р.Седжвик. "Фундаментальные алгоритмы на С++. Алгоритмы на графах" - СПб, ДиаСофтЮП, 2002
Анонимный участник

Навигация