Алгоритмы на графах (на псевдокоде) / CLIQUE2
.docПорождение клик графа G=(V,E)
procedure Clique ( N, D: SetVert);
(* Пусть S - узел в дереве поиска,
N={x V ( s S V: {x,s} E) &
( S* S: поддерево S* {x}- не исследовано)},
D={x V ( s S V: {x,s} E) &
( S* S: поддерево S* {x}- исследовано)}.
Вершины N D смежны с каждой вершиной из S. *)
begin
if N D=
then Фиксировать клику S
else
if N then {Исследовать первое поддерево}
begin
First:=вершина из N; (*заменить две строки*)
Explore(First); (*на # (см. далее) *)
{далее по Утв.1 исследовать оставшиеся}
while N (V-Adj(First)) do
begin v:= вершина из N (V-Adj(First)) ;
Explore(v)
end {while}
end {then}
else
{ N= & D и по Утв.2 новых клик не будет} Skip
{fi}
{fi}
end{Clique};
procedure Explore(u);
begin
N := N \ {u};
S := S + {u};
Clique( N Adj(u), D Adj(u) );
S := S \ {u};
D := D + {u};
end {Explore};
___________________________________________
Первый вызов:
S ;
Clique(V, );
___________________________________________
# - Замена фрагмента:
First:=вершина из N D, которая максимизирует Card(N Adj(First));
if First N then {Исследовать первое поддерево} Explore(First);