class Rodbina: __getitem__ = { "Adam": ["Matjaz", "Cilka", "Daniel", "Erik"], "Aleksander": [], "Alenka": [], "Barbara": [], "Cilka": [], "Daniel": ["Elizabeta", "Hans"], "Erik": [], "Elizabeta": ["Ludvik", "Jurij", "Barbara", "Herman"], "Franc": [], "Herman": ["Margareta"], "Hans": [], "Jozef": ["Alenka", "Petra", "Aleksander"], "Jurij": ["Franc", "Jozef"], "Ludvik": [], "Margareta": [], "Matjaz": ["Viljem"], "Mihael": [], "Petra": [], "Tadeja": [], "Viljem": ["Tadeja"], }.__getitem__ otroci = Rodbina() def obstaja_rekurzivno(oseba, ime): if oseba == ime: return True for otrok in otroci[oseba]: if obstaja_rekurzivno(otrok, ime): return True return False def obstaja_v_globino(oseba, ime): vprasati = [oseba] while vprasati: sprasujem = vprasati.pop() print(sprasujem) if sprasujem == ime: return True vprasati += otroci[sprasujem][::-1] # vrstni red otrok obrnemo le, da gre z leve proti desni # tudi brez [::-1] bi dobili iskanje v globino, le da bi bili najprej # na vrsti desni, ne levi otroci return False def obstaja_v_sirino(oseba, ime): vprasati = [oseba] while vprasati: sprasujem = vprasati.pop(0) print(sprasujem) if sprasujem == ime: return True vprasati += otroci[sprasujem] return False print(obstaja_v_sirino("Elizabeta", "X"))