Virtual Object
::
Programs
:: Эйлеров цикл в неориентированном графе |
||||
Наша кнопка |
||||
Поиск Эйлерового цикла в неориентированном графе {$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. |
||||
Object © 2004 - 2005. All rights reserved. |