Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type trec = record
- kota, wkt : longint;
- tol : boolean;
- end;
- var
- qh, qt : longint;
- q : array [1..125000] of trec;
- lewat : array [1..500] of byte;
- procedure init;
- begin
- qh := 0;
- qt := 0;
- end;
- procedure insert (d : trec);
- begin
- if qh = 0 then qh := 1;
- inc (qt);
- q[qt] := d;
- end;
- function delete : trec;
- var hasil : trec;
- begin
- hasil := q[qh];
- if qh = qt then init else inc (qh);
- delete := hasil;
- end;
- var
- jumkota, jumjalan, jumtol, awal, roma, b, k, a, ja, jb : longint;
- s, s1, s2 : trec;
- ketemu : boolean;
- mat, mattol : array [1..500, 1..500] of longint;
- begin
- qh:=0;
- qt:=0;
- readln (jumkota, jumjalan, jumtol, awal, roma);
- for b := 1 to jumkota do begin
- for k := 1 to jumkota do begin
- mat[b,k] := 0;
- mattol[b,k] := 0;
- end;
- end;
- for a := 1 to jumjalan do begin
- readln (ja, jb);
- mat[ja, jb] := 1;
- mat[jb, ja] := 1;
- end;
- for a := 1 to jumtol do begin
- readln (ja, jb);
- mattol[ja, jb] := 2;
- mattol[jb, ja] := 2;
- end;
- {for b:= 1 to jumkota do begin
- for k:= 1 to jumkota do
- write(mat[b,k]:4);
- writeln;
- end;}
- ketemu := false;
- s.tol := false;
- s.wkt := 0;
- s.kota := awal;
- for a := 1 to 500 do begin
- lewat[a] := 0;
- end;
- lewat[awal] := 1;
- insert (s);
- while (ketemu = false) and ((qh <> 0) and (qt <> 0)) do begin
- s1 := delete;
- //write('kota skr=',s1.kota);
- //if s1.tol=true then write(' sudah tol ') else write(' belum tol ');
- //writeln('jarak=',s1.wkt);
- if s1.kota = roma then ketemu := true else begin
- s2.wkt:= s1.wkt + 1;
- for k := 1 to jumkota do begin
- if (mat[s1.kota, k] = 1) and ((lewat[k] = 0) or (lewat[k] = 2))
- then begin
- lewat[k] := 1;
- s2.tol := false;
- //cektol[k] := false;
- s2.kota := k;
- //writeln('expand ke=',s2.kota,' tanpa tol');
- insert (s2);
- end else if (mattol[s1.kota, k] = 2) and (lewat[k] = 0) and
- (s1.tol = false) then begin
- lewat[k] := 2;
- s2.tol := true;
- //cektol[k] := true;
- s2.kota := k;
- //writeln('expand ke=',s2.kota,' dengan tol');
- insert (s2);
- end;
- end;
- end;
- end;
- if ketemu = true then writeln (s1.wkt);
- end.
Add Comment
Please, Sign In to add comment