Ocena użytkownikóww: ***** / 1
Nadesłany przez Tomasz Lubiński, 09 sierpnia 2005 01:00
Kod przedstawiony poniżej przedstawia główną część rozwiązania problemu.
Pobierz pełne rozwiązanie.Jeżeli nie odpowiada Ci sposób formatowania kodu przez autora skorzystaj z pretty printer'a i dostosuj go automatycznie do siebie.
graficzny2_d/ciag_graficzny.dpr:
//www.algorytm.org
//algorytm testowania czy podany ciąg stopni wierzcholków grafów jest graficzny
//Tomasz Lubiński (c) 2003
program ciag_graficzny;
uses
SysUtils;
{$R *.RES}
{$Apptype Console}
var
graficzny: Boolean;
n,i,s: Integer;
c: Array[1..100] of Integer;
//sortuje ciąg nierosnąco
procedure sort(var c:Array of Integer; n: Integer);
var j,k: Integer;
flag: Boolean;
begin
flag:=true;
while (flag) do
begin
flag:=false;
for j:=0 to n-2 do
if c[j]<c[j+1] then
begin
k:=c[j];
c[j]:=c[j+1];
c[j+1]:=k;
flag:=true;
end;
end;
end;
begin
//pobierz dane
writeln('Podaj liczbe wierzcholkow grafu');
readln(n);
for i:=1 to n do
begin
writeln('Podaj stopien wierzcholka '+IntToStr(i));
readln(c[i]);
end;
//algorytm testowania czy podany ciąg stopni wierzcholkow jest graficzny
graficzny:=true;
//sprawdz czy suma ciągu jest liczbą parzystą
s:=0;
for i:=1 to n do s:=s+c[i];
if (s mod 2)<>0 then graficzny:=false
else sort(c,n); //posortuj ciąg nierosnąco jeżeli suma jest liczbą parzystą
while ((c[1]<>0) and graficzny) do
begin
s:=0;
for i:=2 to n do
if c[i]<>0 then s:=s+1;
if c[1]>s then graficzny:=false
else for i:=2 to c[1]+1 do c[i]:=c[i]-1;
c[1]:=0;
sort(c,n);
end;
//podaj użytkownikowi wynik
if (graficzny) then writeln('Podany ciąg jest graficzny')
else writeln('Podany ciąg nie jest graficzny');
readln;
end.