Pagini recente » Cod sursa (job #576935) | Cod sursa (job #1906754) | Cod sursa (job #3175503) | Cod sursa (job #908620) | Cod sursa (job #1584959)
Program TopologicalSort;
type
lista=^datelista;
celula=^datecelula;
datelista=record
nr:longint;
next:lista;
end;
datecelula=record
a,x,z:lista;
tmp,per:boolean;
end;
tabel=array[1..50000] of celula;
var t:tabel;
n,m:longint;
f1,f2:text;
Procedure initieregraf;
var i:longint;
begin
for i:=1 to n do
begin
new(t[i]);
new(t[i]^.x);
t[i]^.x^.nr:=-1;
t[i]^.x^.next:=nil;
t[i]^.a:=t[i]^.x;
t[i]^.z:=t[i]^.x;
t[i]^.tmp:=false;
t[i]^.per:=false;
end;
end;
Procedure citiredate;
var i,a,b:longint;
begin
for i:=1 to m do
begin
readln(f1,a,b);
new(t[a]^.x);
t[a]^.x^.nr:=b;
t[a]^.x^.next:=nil;
t[a]^.z^.next:=t[a]^.x;
t[a]^.z:=t[a]^.x;
end;
end;
Procedure visit(i:longint);
begin
if t[i]^.tmp=true then
exit;
if t[i]^.per=false then
begin
t[i]^.tmp:=true;
t[i]^.x:=t[i]^.a^.next;
while(t[i]^.x<>nil) do
begin
visit(t[i]^.x^.nr);
t[i]^.x:=t[i]^.x^.next;
end;
t[i]^.per:=true;
t[i]^.tmp:=false;
write(f2,i,' ');
end;
end;
Procedure tpsort;
var i:longint;
begin
for i:=1 to n do
if t[i]^.per=false then
visit(i);
end;
Procedure main;
begin
readln(f1,n,m);
initieregraf;
citiredate;
tpsort;
end;
begin
assign(f1,'sortare.in'); reset(f1);
assign(f2,'sortare.out'); rewrite(f2);
main;
close(f1);
close(f2);
end.