Guest User

Untitled

a guest
Sep 26th, 2018
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.35 KB | None | 0 0
  1. type trec = record
  2. kota, wkt : longint;
  3. tol : boolean;
  4. end;
  5.  
  6. var
  7. qh, qt : longint;
  8. q : array [1..125000] of trec;
  9. lewat : array [1..500] of byte;
  10.  
  11. procedure init;
  12. begin
  13. qh := 0;
  14. qt := 0;
  15. end;
  16.  
  17. procedure insert (d : trec);
  18. begin
  19. if qh = 0 then qh := 1;
  20. inc (qt);
  21. q[qt] := d;
  22. end;
  23.  
  24. function delete : trec;
  25. var hasil : trec;
  26. begin
  27. hasil := q[qh];
  28. if qh = qt then init else inc (qh);
  29. delete := hasil;
  30. end;
  31.  
  32.  
  33. var
  34. jumkota, jumjalan, jumtol, awal, roma, b, k, a, ja, jb : longint;
  35. s, s1, s2 : trec;
  36. ketemu : boolean;
  37. mat, mattol : array [1..500, 1..500] of longint;
  38. begin
  39. qh:=0;
  40. qt:=0;
  41. readln (jumkota, jumjalan, jumtol, awal, roma);
  42. for b := 1 to jumkota do begin
  43. for k := 1 to jumkota do begin
  44. mat[b,k] := 0;
  45. mattol[b,k] := 0;
  46. end;
  47. end;
  48.  
  49. for a := 1 to jumjalan do begin
  50. readln (ja, jb);
  51. mat[ja, jb] := 1;
  52. mat[jb, ja] := 1;
  53. end;
  54.  
  55. for a := 1 to jumtol do begin
  56. readln (ja, jb);
  57. mattol[ja, jb] := 2;
  58. mattol[jb, ja] := 2;
  59. end;
  60.  
  61. {for b:= 1 to jumkota do begin
  62. for k:= 1 to jumkota do
  63. write(mat[b,k]:4);
  64. writeln;
  65. end;}
  66.  
  67.  
  68. ketemu := false;
  69. s.tol := false;
  70. s.wkt := 0;
  71. s.kota := awal;
  72. for a := 1 to 500 do begin
  73. lewat[a] := 0;
  74. end;
  75. lewat[awal] := 1;
  76. insert (s);
  77.  
  78. while (ketemu = false) and ((qh <> 0) and (qt <> 0)) do begin
  79. s1 := delete;
  80. //write('kota skr=',s1.kota);
  81. //if s1.tol=true then write(' sudah tol ') else write(' belum tol ');
  82. //writeln('jarak=',s1.wkt);
  83. if s1.kota = roma then ketemu := true else begin
  84. s2.wkt:= s1.wkt + 1;
  85. for k := 1 to jumkota do begin
  86. if (mat[s1.kota, k] = 1) and ((lewat[k] = 0) or (lewat[k] = 2))
  87. then begin
  88. lewat[k] := 1;
  89. s2.tol := false;
  90. //cektol[k] := false;
  91. s2.kota := k;
  92. //writeln('expand ke=',s2.kota,' tanpa tol');
  93. insert (s2);
  94. end else if (mattol[s1.kota, k] = 2) and (lewat[k] = 0) and
  95. (s1.tol = false) then begin
  96. lewat[k] := 2;
  97. s2.tol := true;
  98. //cektol[k] := true;
  99. s2.kota := k;
  100. //writeln('expand ke=',s2.kota,' dengan tol');
  101. insert (s2);
  102. end;
  103. end;
  104. end;
  105. end;
  106.  
  107. if ketemu = true then writeln (s1.wkt);
  108. end.
Add Comment
Please, Sign In to add comment