% Wegesuche in einem Labyrinth %%%%%%%%%%%%%%%%%%%%%% Daten als Wissen: % Tueren (einseitig): tuer(a,b). tuer(b,c). tuer(b,d). tuer(c,e). tuer(c,f). tuer(d,e). tuer(e,f). % Tueren (beidseitig): u_tuer(X,Y) :- tuer(X,Y). u_tuer(X,Y) :- tuer(Y,X). %%%%%%%%%%%%%%%%%%%%%% Wegesuche: gehe(X,X,Besucht). gehe(X,Y,Besucht):- u_tuer(X,Z), nichtEnthalten(Z,Besucht), gehe(Z,Y,[Z|Besucht]). ungleich1(a,b). ungleich1(a,c). ungleich1(a,d). ungleich1(a,e). ungleich1(a,f). ungleich1(b,c). ungleich1(b,d). ungleich1(b,e). ungleich1(b,f). ungleich1(c,d). ungleich1(c,e). ungleich1(c,f). ungleich1(d,e). ungleich1(d,f). ungleich1(e,f). ungleich(X,Y) :- ungleich1(X,Y). % symmetrischer Abschluss ungleich(X,Y) :- ungleich1(Y,X). nichtEnthalten(E,[]). nichtEnthalten(E,[K|Rest]) :- ungleich(E,K), nichtEnthalten(E,Rest). %%%%%%%%%%%%%%%%%%%%%% Anfragen: % Existiert Weg von a nach f? % ?- gehe(a,f,[a]). % yes % Existiert Weg von a nach f, der nicht durch die Raeume c und e fuehrt? % ?- gehe(a,f,[a,c,e]). % no