/* Napisati prolog predikat koji, na osnovu informacija o susedstvu drzava, u bazu znanja dodaje informacije o njihovoj boji tako da se iskoriste samo cetiri boje (crvena, plava, zuta i zelena) i da dve susedne drzave ne budu obojene istom bojom. Potom napraviti predikat koji pronalazi put izmedju dve drzave (ako postoji) tako da taj put ne prolazi kroz drzave obojene zutom. */ susedi(srj,bjrm). susedi(srj,albanija). susedi(srj,bugarska). susedi(srj,madjarska). susedi(srj,rumunija). susedi(bjrm,albanija). susedi(bjrm,bugarska). susedi(bjrm,grcka). susedi(albanija,grcka). susedi(bugarska,grcka). susedi(bugarska,turska). susedi(bugarska,rumunija). susedi(madjarska,rumunija). susedi(grcka,turska). susedi(grcka,kipar). susedi(kipar,turska). razdvoj(crvena,plava). razdvoj(crvena,zuta). razdvoj(crvena,zelena). razdvoj(plava,crvena). razdvoj(plava,zuta). razdvoj(plava,zelena). razdvoj(zuta,crvena). razdvoj(zuta,plava). razdvoj(zuta,zelena). razdvoj(zelena,crvena). razdvoj(zelena,plava). razdvoj(zelena,zuta). oboj_mapu(Srj,Bjrm,Alb,Bug,Madj,Rum,Grc,Tur,Kip):- razdvoj(Srj,Bjrm), razdvoj(Srj,Alb), razdvoj(Srj,Bug), razdvoj(Srj,Madj), razdvoj(Srj,Rum), razdvoj(Bjrm,Alb), razdvoj(Bjrm,Bug), razdvoj(Bjrm,Grc), razdvoj(Alb,Grc), razdvoj(Bug,Grc), razdvoj(Bug,Tur), razdvoj(Madj,Rum), razdvoj(Grc,Tur), razdvoj(Grc,Kip), razdvoj(Kip,Tur). dopisi:-oboj_mapu(Srj,Bjrm,Alb,Bug,Madj,Rum,Grc,Tur,Kip), assertz(obojen(srj,Srj)), assertz(obojen(bjrm,Bjrm)), assertz(obojen(albanija,Alb)), assertz(obojen(bugarska,Bug)), assertz(obojen(madjarska,Madj)), assertz(obojen(rumunija,Rum)), assertz(obojen(grcka,Grc)), assertz(obojen(turska,Tur)), assertz(obojen(kipar,Kip)). nezute :- dopisi, write('Unesi ime polazne drzave: '),read(A),nl, write('Unesi ime ciljne drzave: '),read(B),nl, write('Putujuci iz drzave '),write(A), write(' u drzavu '),write(B),nl, write('prolazi se kroz (neobojene zutom):'),nl, L=[], put(A,B,L). puto(K1,K1,L):-odstampaj(L). puto(K1,K2,L):-susedi(K1,N),(not(obojen(N,zuta));N=K2), not(pripada(N,L)),puto(N,K2,[N|L]). puto(K1,K2,L):-susedi(N,K1),(not(obojen(N,zuta));N=K2), not(pripada(N,L)),puto(N,K2,[N|L]). nezelene :- dopisi, write('Unesi ime polazne drzave: '),read(A),nl, write('Unesi ime ciljne drzave: '),read(B),nl, write('Putujuci iz drzave '),write(A), write(' u drzavu '),write(B),nl, write('prolazi se kroz (neobojene zelenim):'),nl, L=[], putovanje(A,B,L). putovanje(K1,K1,L):-odstampaj(L). putovanje(K1,K2,L):-susedi(K1,N), (not(obojen(N,zelena));N=K2), not(pripada(N,L)), putovanje(N,K2,[N|L]). putovanje(K1,K2,L):-susedi(N,K1), (not(obojen(N,zelena));N=K2), not(pripada(N,L)), putovanje(N,K2,[N|L]). pripada(X,[X|_]). pripada(X,[_|Y]):-pripada(X,Y). odstampaj([G|R]):-stampa(R). stampa([]):-nl,!. stampa([G|R]):-stampa(R),nl,write(G),tab(4),obojen(G,B),write(B).