Advertisement
Guest User

Untitled

a guest
Apr 23rd, 2018
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.45 KB | None | 0 0
  1. var d: array [1..1000000] of integer;
  2. a, a2, p, ans: array [1..5000] of array of integer;
  3. mark: array[1..1000000] of boolean;
  4. i,n,s,min,j,q,f, x, y, z, t, len, m: integer;
  5.  
  6.  
  7.  
  8.  
  9. begin
  10.  
  11. //reset(input, 'dijkstra.in'); rewrite(output, 'dijkstra.out');
  12. read(n,m,s,f);
  13.  
  14.  
  15. for i:=1 to m do begin
  16. read(x, y, z);
  17. setlength(a[x], length(a[x] + 1));
  18. setlength(a[y], length(a[y] + 1));
  19. setlength(a2[x], length(a2[x] + 1));
  20. setlength(a2[y], length(a2[y] + 1));
  21. a[x][length(a[x])] := y;
  22. a[y][length(a[y])] := x;
  23. a2[x][length(a2[x])] := z;
  24. a2[y][length(a2[x])] := z;
  25. end;
  26. d[s]:=0;
  27.  
  28. for i:=1 to n do begin
  29. if (i<>s) then d[i]:=1000000000;
  30. mark[i]:=False;
  31. end;
  32.  
  33. for i:=1 to n do begin
  34. d[n+1]:=1000000001;
  35. min:=n+1;
  36. for j:= 1 to n do begin
  37. if (d[min]>d[j]) and (mark[j]=False) then min:=j;
  38. if d[min] =1000000000 then break;
  39. if d[min] <> 1000000000 then begin
  40. mark[min]:=True;
  41. for j:=1 to length(a[min]) do begin
  42. t := a[min][j];
  43. len := a2[min][j];
  44. if(d[min]+ len < d[t]) then begin
  45. d[t] := d[min]+len;
  46. p[t] := min;
  47. end;
  48. end;
  49. end;
  50. end;
  51. end;
  52. if (d[f]=1000000000) then writeln(-1)
  53. else begin
  54. writeln(d[f]);
  55. x:= f;
  56. for i:= 1 to d[f] do begin
  57. ans[i] := x;
  58. x := p[x];
  59. end;
  60. for i:= d[f] downto 1 do
  61. writeln(ans[i], ' ');
  62. end;
  63. readln;
  64. readln;
  65. //close(input); close(output);
  66.  
  67. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement