% KSP 1946 1.Lednice pocet(_, [], 0). pocet(Jidlo, [Jidlo|Zbytek], Pocet) :- !, pocet(Jidlo, Zbytek, Pocet1), Pocet is Pocet1 + 1. pocet(Jidlo, [_|Zbytek], Pocet) :- pocet(Jidlo, Zbytek, Pocet). % KSP 1946 2.Myší spartakiáda barva('c'). barva('b'). generuj(0, Sezn) :- vypis(Sezn), !, fail. generuj(X, Sezn) :- Y is X - 1, barva(B), generuj(Y, [B|Sezn]). vypis([]) :- nl. vypis([H|T]) :- put(H), vypis(T). mysi(N) :- generuj(N,[]). % KSP 1946 3.Myší bludiště % Reprezentace hrany faktem h(odkud,kam) % Obousměrné hrany zapíšeme dvěma fakty % Např. h(1,2). h(2,1). h(1,2). h(2,1). h(2,3). h(3,2). h(3,1). h(1,3). h(3,4). h(4,3). cesta([Cil|_], Cil, [], _). cesta([Start|Fronta], Cil, [[Start,Sousedi]|Zbytek], Navst) :- % vyber aktuální vrchol ze zásobníku findall(Soused, (h(Start,Soused),not(member(Soused,Navst))), Sousedi), % najdi jeho nenavštívené sousedy append(Fronta, Sousedi, NovaFronta), % vlož sousedy na zásobník append(Navst, Sousedi, NovyNavst), % označ sousedy jako navštívené cesta(NovaFronta, Cil, Zbytek, NovyNavst). % spusť se s novým zásobníkem cesta(Start, Cil, Cesta) :- cesta([Start], Cil, Predchudci, [Start]), najdi_cestu(Start, Cil, Predchudci, CestaObr), reverse(CestaObr,Cesta). najdi_cestu(Start, Start, _, [Start]). najdi_cestu(Start, Cil, Predchudci, [Cil|Cesta]) :- najdi_predchudce(Cil, Predchudci, Predchudce), najdi_cestu(Start, Predchudce, Predchudci, Cesta). najdi_predchudce(Vrchol, [[Predchudce,Naslednici]|_], Predchudce) :- member(Vrchol,Naslednici). najdi_predchudce(Vrchol, [_|Zbytek], Predchudce) :- najdi_predchudce(Vrchol, Zbytek, Predchudce).