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