Titlul: Algoritmul lui Djikastra
Scris de: Teuca Sergiu din Martie 01, 2013, 15:33:17
Buna am si eu o mare problema. Ma chinui de cateva ore si nu reusesc sa implementez algoritmul lui Djikastra. Ba imi da eroare 201 ba nu-mi da nici un raspuns corect.ASstept un raspuns cat mai rapid. Multumesc. Algoritmul: program Djikastra; VAR c:array[1..25,1..25] of longint; i,n,m,x,y,j:integer; f:text; d:array[1..20] of longint; tata:array[1..20] of smallint; procedure djik(x0:integer); VAR i,n,k:integer; min:longint; viz:array[1..20] of integer; ok:boolean; BEGIN for i:=1 to n do begin tata[i]:=x0; viz[i]:=0; d[i]:=c[x0][i]; end; tata[x0]:=0; viz[x0]:=1; ok:=true; while ok do begin min:=200000; for i:=1 to n do if (viz[i]=0) and (min>d[i]) then begin min:=d[i]; k:=i; end; if min<>200000 then begin viz[k]:=1; for i:=1 to n do if (viz[i]=0) and (d[i]>d[k]+c[k][i]) then begin d[i]:=d[k]+c[k][i]; tata[i]:=k; end; end else ok:=false; end; end;
procedure afisare(y:integer); begin if y<>0 then begin afisare(tata[y]); write(y,' '); end; end;
BEGIN assign(f,'a.in'); Reset(f); readln(f,n,m); for i:=1 to m do for j:=1 to m do c[i][j]:=200000; for i:=1 to m do read(f,x,y,c[x,y]); for i:=1 to m do begin for j:=1 to m do write(c[i,j],' '); writeln; end; djik(1); afisare(7); Close(f); readln; END.
Fisierul a.in: 7 12 1 2 10 1 3 150 1 4 17 2 3 10 2 7 100 4 2 32 4 6 40 3 5 10 3 7 80 5 6 10 6 7 10 5 7 100
Titlul: Răspuns: Algoritmul lui Djikastra
Scris de: trololol din Martie 01, 2013, 16:51:47
incearca sa inversezi i cu j si asa o sa iti dea pe test
|