Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Clasament acs_pc_2017-2018_winter_break_1231413232 | Monitorul de evaluare | Cod sursa (job #1900517)
type lista=^celula;
celula=record
info:longint;
next:lista;
end;
tablou=array [1..100100]of lista;
tab=array [1..100100]of longint;
boo=array [1..100100]of 0..1;
var a:tablou;
rez,t:tab;
viz:boo;
i,j,k,m,n,x,p,q:longint;
f,g:text;
r:lista;
procedure adauga(var aux:lista;x:longint);
var r:lista;
begin
new(r);
r^.info:=x;
r^.next:=aux;
aux:=r;
end;
{procedure bfs(var x,i,k:longint);
var r:lista;
begin
r:=a[x];
viz[x]:=1;
while r<>nil do
begin
if viz[r^.info]=0 then begin
rez[r^.info]:=rez[x]+1;
k:=k+1;
t[k]:=r^.info;
end;
r:=r^.next;
end;
i:=i+1;
if i<=k then bfs(t[i],i,k);
end;
}
begin
assign(f,'bfs.in') ;
assign(g,'bfs.out');
reset(f);
rewrite(g);
read(f,n,m,x);
for i:=1 to n do
begin
a[i]:=nil;
viz[i]:=0;
rez[i]:=0;
end;
viz[x]:=1;
for i:=1 to m do
begin
read(f,p,q);
adauga(a[p],q);
end;
t[1]:=x;
k:=1;
i:=1;
while i<=k do
begin
viz[t[i]]:=1;
r:=a[t[i]];
while r<>nil do
begin
if viz[r^.info]=0 then begin
k:=k+1;
t[k]:=r^.info;
rez[r^.info]:=rez[t[i]]+1;
end;
r:=r^.next;
end;
i:=i+1;
end;
for i:=1 to n do
if viz[i]=0 then rez[i]:=-1;
for i:=1 to n do
write(g,rez[i],' ') ;
close(f);
close(g);
end.