http://virtual-object.narod.ru
 
    Virtual Object :: Programs :: Эйлеров цикл в неориентированном графе
  Download
 
Наша кнопка
Поиск Эйлерового цикла в неориентированном графе
{$APPTYPE CONSOLE}

var a:array [1..100,1..100] of boolean; ⁄⁄ матрица смежности
vert:array [1..10000] of longint; ⁄⁄ степень вершин
way:array [1..10000] of longint; ⁄⁄ Эйлеров цикл
flag:array [1..10000] of longint; ⁄⁄ компоненты связности
i,x,y,w:longint;
n,m:longint; ⁄⁄ m - число дуг, n - число вершин
count:longint; ⁄⁄ число компонент связности
⁄⁄---------------------------------------------------
procedure no;
begin
 write(′Эйлеров цикл не существует!′);
 halt;
end;
⁄⁄---------------------------------------------------
procedure komponenta(i:longint);
var j:longint;
begin
 flag[i]:=count;
 for j:=1 to n do
  if (a[i,j])and(flag[j]=0) then komponenta(j);
end;
⁄⁄---------------------------------------------------
procedure poisk(i:longint);
var j:longint;
begin
 for j:=1 to n do
  if a[i,j] then
   begin
    a[i,j]:=false;
    a[j,i]:=false;
    poisk(j);
   end;
 inc(w);
 way[w]:=i;
end;
⁄⁄---------------------------------------------------
begin
assign(input,′input.txt′);reset(input);
assign(output,′output.txt′);rewrite(output);
fillchar(a,sizeof(a),false);
fillchar(flag,sizeof(flag),0);
fillchar(vert,sizeof(vert),0);
read(n,m);
 for i:=1 to m do
  begin
   readln(x,y);
   a[x,y]:=true;
   a[y,x]:=true;
   inc(vert[x]);
   inc(vert[y]);
  end;
 count:=0;
 for i:=1 to n do
  if flag[i]=0 then
   begin
    inc(count);
    if count>1 then no; ⁄⁄ граф не связен
    komponenta(i);
   end;
 for i:=1 to n do
  if vert[i] mod 2=1 then no; ⁄⁄ есть вершины нечётной степени
w:=0;
poisk(1);
for i:=1 to w do
 write(way[i],′ ′);
close(input);
close(output);
end.
  JavaScript
  Animation
  Links
 
  Mail
 
 
 

Object © 2004 - 2005. All rights reserved.

 
Сайт создан в системе uCoz