Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var d: array [1..1000000] of integer;
- a, a2, p, ans: array [1..5000] of array of integer;
- mark: array[1..1000000] of boolean;
- i,n,s,min,j,q,f, x, y, z, t, len, m: integer;
- begin
- //reset(input, 'dijkstra.in'); rewrite(output, 'dijkstra.out');
- read(n,m,s,f);
- for i:=1 to m do begin
- read(x, y, z);
- setlength(a[x], length(a[x] + 1));
- setlength(a[y], length(a[y] + 1));
- setlength(a2[x], length(a2[x] + 1));
- setlength(a2[y], length(a2[y] + 1));
- a[x][length(a[x])] := y;
- a[y][length(a[y])] := x;
- a2[x][length(a2[x])] := z;
- a2[y][length(a2[x])] := z;
- end;
- d[s]:=0;
- for i:=1 to n do begin
- if (i<>s) then d[i]:=1000000000;
- mark[i]:=False;
- end;
- for i:=1 to n do begin
- d[n+1]:=1000000001;
- min:=n+1;
- for j:= 1 to n do begin
- if (d[min]>d[j]) and (mark[j]=False) then min:=j;
- if d[min] =1000000000 then break;
- if d[min] <> 1000000000 then begin
- mark[min]:=True;
- for j:=1 to length(a[min]) do begin
- t := a[min][j];
- len := a2[min][j];
- if(d[min]+ len < d[t]) then begin
- d[t] := d[min]+len;
- p[t] := min;
- end;
- end;
- end;
- end;
- end;
- if (d[f]=1000000000) then writeln(-1)
- else begin
- writeln(d[f]);
- x:= f;
- for i:= 1 to d[f] do begin
- ans[i] := x;
- x := p[x];
- end;
- for i:= d[f] downto 1 do
- writeln(ans[i], ' ');
- end;
- readln;
- readln;
- //close(input); close(output);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement