Pagini recente » Cod sursa (job #103845) | Cod sursa (job #1039991) | Cod sursa (job #352564) | Cod sursa (job #1617238) | Cod sursa (job #1585005)
Program TopologicalSort;
type
lista=^datelista;
celula=^datecelula;
datelista=record
nr:longint;
next:lista;
end;
datecelula=record
a,x,z:lista;
tmp:boolean;
end;
solutie=array[1..50000] of integer;
graf=array[1..50000] of celula;
var t:graf;
sol:solutie;
n,m,l: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;
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
t[i]^.tmp:=true;
t[i]^.x:=t[i]^.a^.next;
while(t[i]^.x<>nil)do
begin
if t[t[i]^.x^.nr]^.tmp=false then
visit(t[i]^.x^.nr);
t[i]^.x:=t[i]^.x^.next;
end;
l:=l+1;
sol[l]:=i;
end;
Procedure tpsort;
var i:longint;
begin
for i:=1 to n do
if t[i]^.tmp=false then
visit(i);
end;
Procedure afisarerezultat;
begin
while(l<>0) do
begin
write(f2,sol[l],' ');
l:=l-1;
end;
end;
Procedure main;
begin
readln(f1,n,m);
initieregraf;
citiredate;
l:=0;
tpsort;
afisarerezultat;
end;
begin
assign(f1,'sortare.in'); reset(f1);
assign(f2,'sortare.out'); rewrite(f2);
main;
close(f1);
close(f2);
end.