uses graphuter; function vejir(n: Integer): Graph; var g: Graph; p: Integer; begin if n=1 then begin g := EmptyG; AddV(g, 1); AddV(g, undef); AddE(g, 1, 2, 0); end else begin p := n div 2; g := vejir(p); g := Join(g, g, IM_value_defined, IM_none); AddE(g, p+1, p+2, undef); if n mod 2 = 1 then begin AddV(g, undef); AddE(g, n, n+1, 0); AddE(g, 1, n+1, 0); end; end; vejir := g; end; function cesta(n: Integer): Graph; var i, posledni, novy: Integer; g: Graph; begin g := EmptyG; posledni := AddV(g, 0); for i := 1 to n do begin novy := AddV(g, 0); AddE(g, posledni, novy, undef); posledni := novy; end; cesta := g; end; function vzdalenost(g: Graph; v, w: Integer): Value; var h, k, l, m: Graph; n: Integer; begin SetAllV(g, undef); SetV(g, v, 2); SetV(g, w, 3); WriteG(g); n := CountV(g); h := vejir(n); SetV(h, n+1, 2); WriteG(h); k := Join(g, h, IM_value_defined, IM_any); ReplaceV(k, 2, undef); WriteG(k); l := cesta(n); SetAllV(l, undef); SetV(l, 1, 1); SetV(l, n+1, 3); WriteG(l); m := Find(k, l, IM_value_strict, IM_any); WriteLn('Found:'); WriteG(m); vzdalenost := SumE(m); end; var g: Graph; begin g := EmptyG; AddV(g, undef); AddV(g, undef); AddV(g, undef); AddV(g, undef); AddV(g, undef); AddE(g, 1, 2, 10); AddE(g, 1, 3, 1); AddE(g, 2, 5, 3); AddE(g, 3, 4, 2); AddE(g, 4, 5, 4); AddE(g, 4, 2, 20); WriteG(g); WriteLn('Vzdalenost: ', vzdalenost(g, 1, 5)); end.