Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Algoritmul lui Djikastra  (Citit de 1088 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Disturbed
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« : 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:
Cod:
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:
Cod:
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
Memorat
trollface
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #1 : Martie 01, 2013, 16:51:47 »

incearca sa inversezi i cu j si asa o sa iti dea pe test
Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines