program MinCesta3; {Nalezeni nejlepsi cesty v ohodnocenem grafu} {Dijkstruv algoritmus s vice kriterii} const MaxVrch = 100; {max. pripustny pocet vrcholu} var Cena, Cas: array[1..MaxVrch,1..MaxVrch] of integer; {ohodnoceni hran grafu ve tvaru matic vzdalenosti} HC, HT: array[1..MaxVrch] of integer; {hodnoty vrcholu} Docas: array[1..MaxVrch] of boolean; {docasna hodnota} P: array[1..MaxVrch] of 1..MaxVrch; {predchudci vrcholu} N: 1..MaxVrch; {pocet vsech vrcholu grafu} Start, Cil: 1..MaxVrch; {vychozi a cilove mesto} Pruchod: boolean; {pokracovat v pruchodu} NovaCena: integer; {mozne zlepseni HC vrcholu} NovyCas: integer; {mozne zlepseni HT vrcholu} i,j: integer; begin {Nacteni vstupnich dat a inicializace:} write('Pocet mest: '); readln(N); write('Cislo vychoziho a ciloveho mesta: '); readln(Start, Cil); for i:=1 to N do begin HC[i]:=maxint; HT[i]:=maxint; Docas[i]:=true; for j:=1 to N do begin Cena[i,j]:=maxint; Cas[i,j]:=maxint end; end; writeln('Autobusove linky ve tvaru "odkud, kam, jizdne, cas":'); while not eof do begin read(i,j); read(Cena[i,j],Cas[i,j]); Cena[j,i]:=Cena[i,j]; Cas[j,i]:=Cas[i,j] end; HC[Start]:=0; HT[Start]:=0; Pruchod:=true; {Pruchod grafem:} while Docas[Cil] and Pruchod do begin j:=Cil; {hledame vrchol s minimalni docasnou hodnotou} for i:=1 to N do if Docas[i] and (HC[i]Start do begin write(i:5); i:=P[i] end; writeln(Start:5) end end.