const MAXDATA=1000; var a:array[0..100,0..100] of integer; dis:array[0..100] of integer; fg:array[0..100] of boolean; n,s,i,j,min:integer; function remin(a,b:integer):integer; begin if a<b then exit(a) else exit(b); end; procedure dijkstra(s:integer); var i,j,k:integer; begin for i:=0 to n do begin fg[s]:=true; for j:=0 to n do begin if (a[s,j]<>0) and (fg[j]=false) then dis[j]:=remin(dis[j],dis[s]+a[s,j]); end; //writeln('xxxx'); min:=MAXDATA; for k:=0 to n do for j:=0 to n do if(a[k,j]<>0) and (fg[j]=false) then if min>dis[j] then begin min:=dis[j]; s:=j; end; end; end; procedure output; var i:integer; begin for i:=0 to n do if i<>s then if dis[i]=MAXDATA then write('-1 ') else write(dis[i],' '); end; begin readln(n,s); dec(n); for i:=0 to n do for j:=0 to n do read(a[i,j]); fillchar(fg,sizeof(fg),false); for i:=0 to n do dis[i]:=MAXDATA; dis[s]:=0; dijkstra(s); output; //writeln('wwwwww'); end. /************************************************************** Problem: 2165 User: admin Language: Pascal Result: Wrong Answer ****************************************************************/