Изменения

Перейти к: навигация, поиск
Алгоритм
== Алгоритм ==
 
=== Псевдокод ===
'''function''' findCutPoints(G[n]: '''Graph'''):<font color=darkgreen> // функция принимает граф G с количеством вершин n и выполняет поиск точек сочленения во всем графе </font>
visited = array[n, ''false'']
'''function''' dfs(v: '''int''', p: '''int'''):
time = time + 1
up[v] = tin[v] = time
visited[v] = ''true''
'''for''' u: (v, u) '''in''' G
'''if''' u == p
'''continue'''
'''if''' visited[u]
up[v] = min(up[v], tin[u])
'''else'''
dfs(u, v)
up[v] = min(up[v], tin[u])
'''if''' up[to] >= tin[v] '''&&''' p != -1 <font color=darkgreen>// если граф состоит из 2 вершин и одного ребра, то p != -1 спасёт, иначе выведет 1 точку сочленения </font>
v — cutpoint
'''if''' v '''is''' root
v — cutpoint
'''for''' i = 1 '''to''' n
'''if''' '''not''' visited[i]
dfs(i, -1)
 
=== Доказательство корректности ===
{{Теорема
|statement=
<br clear="all">
 
=== Псевдокод ===
'''function''' findCutPoints(G[n]: '''Graph'''):<font color=darkgreen> // функция принимает граф G с количеством вершин n и выполняет поиск точек сочленения во всем графе </font>
visited = array[n, ''false'']
'''function''' dfs(v: '''int''', p: '''int'''):
time = time + 1
up[v] = tin[v] = time
visited[v] = ''true''
'''for''' u: (v, u) '''in''' G
'''if''' u == p
'''continue'''
'''if''' visited[u]
up[v] = min(up[v], tin[u])
'''else'''
dfs(u, v)
up[v] = min(up[v], tin[u])
'''if''' up[to] >= tin[v] '''&&''' p != -1 <font color=darkgreen>// если граф состоит из 2 вершин и одного ребра, то p != -1 спасёт, иначе выведет 1 точку сочленения </font>
v — cutpoint
'''if''' v '''is''' root
v — cutpoint
'''for''' i = 1 '''to''' n
'''if''' '''not''' visited[i]
dfs(i, -1)
=== Время работы ===
Анонимный участник

Навигация