Cau mam problem se zapoctem v prologu zadaní zní:
"Na vstupu je zadan uzlove ohodnoceny souvisly graf. Napiste program v jazyce prolog, ktery rozhodne zda je dany graf binarnim stromem."
Pokud chapu zadani spravne mam dany graf napr:
h(0, 1).
h(1, 3).
h(2, 1).
h(2, 3).
h(0, 4).
h(3, 4).
h(4, 4).
h(3, 0).
h(4, 2).
oh(X, Y) :- h(X, Y).
oh(X, Y) :- h(Y, X).
reseni bude podle me easy... bohuzel za 5 cviceni ktere nam na to vyhradili po 5ti letech javy.. plave v tom vetsina tridy..... Za pripadne tipy diky moc
Zapocet v prologu..
-
- Matfyz(ák|ačka) level I
- Příspěvky: 22
- Registrován: 7. 2. 2011 22:41
- Typ studia: Informatika Bc.
Re: Zapocet v prologu..
S definici binarniho stromu na neorientovanym grafu sem mel taky problem, v te uloze by mel byt asi orientovany graf, to by potom vypadalo nejak takhle:
Pokud by se jednalo opravdu o neorientovany graf, zkusil sem to modifikovat tak, aby vyhazoval hrany, co dou ze syna do otce:
Prolog mi taky nijak extra nejde, takze to bude urcite hodne daleko od idealniho reseni.
Kód: Vybrat vše
binStrom:-najdiKoren(K), jeBinStrom([K], [K]).
najdiKoren(K):-h(K, _), not(h(_, K)), setof(Y, h(K, Y), Set), length(Set, L), L =< 2.
jeBinStrom([], _).
jeBinStrom([H|T], Acc):-findall(Y, h(H, Y), Set), jeCyklus(Set, Acc), length(Set, L), !, L =< 2, conc(Set, T, T2), conc(Set, Acc, Acc2), jeBinStrom(T2, Acc2).
jeCyklus([], _).
jeCyklus([H|T], A):-not(member(H, A)), jeCyklus(T, A).
Kód: Vybrat vše
binStrom:-najdiKoren(K), jeBinStrom([p(K, K)], []).
najdiKoren(K):-setof(X, oh(X, K), Set), length(Set, L), L =< 2.
jeBinStrom([], _).
jeBinStrom([p(X, P)|Zasobnik], Acc):-setof(Y, oh(X, Y), Set), vynechx(P, Set, S), jeCyklus(S, Acc), !, length(S, L), L =< 2, naZasobnik(X, S, Zasobnik, Z2), conc(S, Acc, Acc2), jeBinStrom(Z2, Acc2).
vynechx(_, [], []).
vynechx(X, [X|T], T):-!.
vynechx(X, [H|T], [H|TeloBezX]):-vynech(X, T, TeloBezX).
naZasobnik(_, [], Z, Z).
naZasobnik(X, [H|T], Z, Z2):-naZasobnik(X, T, [p(H, X)|Z], Z2).
jeCyklus([], _).
jeCyklus([H|T], A):-not(member(H, A)), jeCyklus(T, A).
-
- Matfyz(ák|ačka) level I
- Příspěvky: 2
- Registrován: 5. 5. 2011 23:47
- Typ studia: Informatika Bc.
Re: Zapocet v prologu..
Díky za pomoc!