Cod sursa(job #1584982)

Utilizator iondodon1998Dodon Ion iondodon1998 Data 30 ianuarie 2016 17:28:10
Problema Sortare topologica Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.32 kb
Program TopologicalSort;
type
	lista=^datelista;
	celula=^datecelula;
	datelista=record
		nr:longint;
		next:lista;
	end;
	datecelula=record
		 a,x,z:lista;
		 tmp: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;
			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]^.x^.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;
		write(f2,i,' ');
	end;


Procedure tpsort;
	var i:longint;
	begin
		for i:=1 to n do
			if t[i]^.tmp=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.