[Pascal] Sortowanie topologiczne

superus
Użytkownik
Użytkownik
Posty: 5
Rejestracja: 18 paź 2009, o 15:09
Płeć: Mężczyzna
Lokalizacja: Bydgoszcz

[Pascal] Sortowanie topologiczne

Post autor: superus »

Mam problem z programem zaliczeniowym z jednego z przedmiotów na studiach, mianowicie muszę napisać program przeprowadzający sortowanie topologiczne. Jak mam przerobić ten kod źródłowy, by program sortował grafy o w miarę dowolnej liczbie wierzchołków? Pomijam tu inne niedoróbki, takie jak te z tablicami czasowymi czy to, że program jeszcze nie wstawia czarnych wierzchołków do stosu

Kod: Zaznacz cały

program ideone;
uses math, crt;
type wierzch=^elem;
	elem= record
	klucz:integer;
	sasiad:wierzch;
	end;
 
var graf:array[1..10] of wierzch;
	poprz:array[1..10] of wierzch;
	kolor:array[1..10] of string;
	timein:array[1..10] of integer;
	timeout:array[1..10] of integer;
	i,j:integer;
	x:wierzch;
 
procedure dodaj(var h:wierzch; m:integer);
var
  u:wierzch;
begin
  new(u);
  u^.klucz := m;
  u^.sasiad := h;
  h := u
end;
 
procedure dfs (g:wierzch)
begin
new(g);
for i:=1 to 10 do
begin
kolor[i]:='bialy';
poprz[i]:=Nil;
end;
for j:=1 to 10 do
if kolor[j]='bialy' then 
dfs-odwiedz(graf[j])
end;
procedure dfs-odwiedz(w:wierzch)
begin
kolor[w]:='szary';
time:=time+1;
timein:=time;
while (w<>Nil) do
if kolor[w]='bialy' then
begin
poprz[w.sasiad]:=w;
dfs-odwiedz(w);
end;
kolor[w]:='czarny';
x^:=w;

time:=time+1;
timeout:=time;
end;

begin
clrscr;
writeln('Wczytaj liczbe wierzcholkow grafu:');
read(n);
for l:=1 to 10 do
begin
dodaj(graf[l]);
wierzch.klucz:=l;
end; 
dfs(graf[1]);
readkey;	
end.
ODPOWIEDZ