Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
ahoj, chtel sem se zeptat na tenhle algoritmus...mohl byste mi nekdo prosim vysvetlit jak funguje? jaky se sem davaj vstupy a vystupy sou jaky?ta matice sousednosti se nacita jen ze vstupu?a ma to nejakou omezenost pro vstupy?diky moc...krome tehlech otazek bych byl moc vdecny kdyby mi tu nekdo velice podrobne napsal proc tento program takhle vypada...diky moc
program GRAFMATICE1;
const
velikost_matice = 4;
type
typ_matice = array[1..velikost_matice,1..velikost_matice] of integer;
var
matice1: typ_matice;
procedure vycistiMatici(var matice:typ_matice);
var
i, j: integer;
begin
for i:=1 to velikost_matice do
begin
for j:= 1 to velikost_matice do
begin
matice[i,j]:= 999;
end;
end;
end;
procedure zadejHranu(odkud: integer; kam: integer; vzdalenost: integer; var matice:typ_matice);
begin
matice[odkud,kam]:= vzdalenost;
matice[kam,odkud]:= vzdalenost;
end;
procedure odeberHranu(odkud: integer; kam: integer; var matice:typ_matice);
begin
matice[odkud,kam]:= 0;
matice[kam,odkud]:= 0;
end;
function jeHrana(odkud: integer; kam: integer; var matice:typ_matice):boolean;
begin
if(matice[odkud,kam] = 1) then jeHrana:=true else
jeHrana:=false;
end;
function minimum(a: integer; b: integer):integer;
begin
if(a<=b) then minimum:= a else
minimum:= b;
end;
procedure nejkratsiCesta(var matice:typ_matice);
{ Samotne hledani nejkratsi cesty }
var
i, j, k: integer;
{pomocne promenne}
begin
for i:=1 to velikost_matice do
begin
for j:=1 to velikost_matice do
begin
for k:=1 to velikost_matice do
begin
matice[i,j]:= minimum(matice[i,j], (matice[i,k] + matice[k,j]));
end; { k }
end; { j }
end; { i }
end;
procedure vypisMatici(var matice:typ_matice);
var
i,j: integer;
begin
writeln('Matice:');
for i:=1 to velikost_matice do
begin
for j:= 1 to velikost_matice do
begin
write(matice[i,j]);
write(',');
end;
writeln;
end;
writeln('--->KONEC MATICE---->');
writeln;
end;
begin
{samotny program}
vycistiMatici(Matice1);
vypisMatici(Matice1);
{zadani nekolika testovacich hran}
zadejHranu(1,2,63,Matice1);
zadejHranu(1,3,103,Matice1);
zadejHranu(1,4,157,Matice1);
zadejHranu(3,4,69,Matice1);
zadejHranu(2,4,111,Matice1);
zadejHranu(2,3,33,Matice1);
{ Most ..1
Kladno ..2
Praha ..3
Kolin ..4 }
vypisMatici(Matice1);
nejkratsiCesta(Matice1);
vypisMatici(Matice1);
readln;
end.
Offline
↑ hessyk: Nechce sa mi to čítať ale tieto dve stránky by mohli pomôcť. Na tej druhej nájdeš aj vizualizáciu.
http://algoritmy.net/article/5207/Floyd … algoritmus
http://www.pms.ifi.lmu.de/lehre/compgeo … ualization
Offline

Nevim, jak moc umis Pascal. Zkusim to popsat, ale ne dopodrobna (zatim :-) ). Ta prvni cast (program, const, type, var) to jsou deklarace ruzne, jestli nevis, tak se zkus nekde podivat co to program, const... apod znamena (anebo to kdyztak napisu kdyz se mi bude chtit :-) ). Pak jsou tam ruzne procedury (vycistiMatici, zadejHranu atd.). Co ty procedury delaji, se da odvodit z nazvu. Hlavni cast zacina tim 'begin' s tou poznamkou {samotny program}. Tam vidis, jak jsou postupne volany procedury:
Nejdriv se vycisti ta matice a pak se vypise.
Pak se do te matice zadaji ty testovaci hrany.
Nakonec se zase ta matice vypise, najde se ta nejkratsi cesta a pak se zase vypise.
Vstupy se nijak nezadavaji, ta matice je zadana uz v programu volanim 'zadejHranu'. Snad jsem alespon castecne tve dotazy zodpovedel, kdyztak se dal ptej.
Offline
ahoj diky moc za trpelivost a za ochotu. Porad mi to ale neni jasny...v programku se moc nevyznam...ten program teda funguje tak, ze se zada do vstupu nejaka matice...tu nevim kde vezmu...pak nechapu jak a proc se vycisti a ty testovaci hrany vezmu kde? jo a rikas ze vstupy se nijak nezadavaj ale ty se zavadaj vzdycky ne? nebo mi to teda vypise abych zadal tu hranu nebo jak to bude vypadat kdyz bych to chtel vyzkouset?
kdyz to se mnou vzdas tak to pochopim...sem totiz vazne antitalent:D
Offline
ahoj, jeste jsem se chtel zeptat ohledne vstupu a vystupu...muzes mi dat prosim nejakej priklad? bude to vypadat tak, ze zadam nejakou matici kde budou 0 na diagonale a nekonecno nebo urcite cislo podle toho jestli je tam cesta a jaka a na vystupu dostanu matici pres ktery vede nejkratsi cesta nebo jak?
jinak par dalsich veci..chtel bych se zeptat jak funguje a hlavne na co je vycistimatici...a pak uplne posledni cast samotny program-tam se nikde nevolaji zadne procedury ani fce ktere jsou nahore napsany tak jak ten program muze fungovat?
diky moc
ä s tim vstupem a vystupem uz jsem to pochopil...dekuju...spis bych potreboval vysvetlit ten samotny program na konci a vycistimatici vstupy a vystupy uz jsem celkem pochopil..
Offline

↑ hessyk:
Myslíš tyto dvě procedury? Tak si je tam zadej (podobně jako je použito zadejHranu(1,2,63,Matice1);) a vyzkoušej co se stane.
procedure odeberHranu(odkud: integer; kam: integer; var matice:typ_matice);
begin
matice[odkud,kam]:= 0;
matice[kam,odkud]:= 0;
end;
function jeHrana(odkud: integer; kam: integer; var matice:typ_matice):boolean;
begin
if(matice[odkud,kam] = 1) then jeHrana:=true else
jeHrana:=false;
end;Ostatní procedury zavolané jsou.
Procedura vycistimatici ti v podstatě inicializuje buňky pole (matice[i,j])- uloží do nich 999 - to ti zaručí, že v každém políčku bude nějaká hodnota.
Výslednou matici by ti mělo vypsat poslední volání procedury vypisMatici(Matice1);
Proč si to prostě nevyzkoušíš spustit?
Offline