![]() |
|||
| HSG |
|
Im folgenden Prolog-Programm wurde im Beispiel aus Röhner, Informatik mit Prolog, S.61 - heimtückisch - die Reihenfolge der Knoten in zwei Kanten getauscht. Die Anfrage ?- tiefensuche(e,i,L) führt dann zu einer ausgedehnten Wanderung:
/* ?- tiefensuche(e,i,L). verläuft ungünstig */
kante(a,b,2).
kante(a,c,3).
kante(b,d,6).
kante(b,e,3).
kante(c,e,1).
kante(c,f,2).
kante(d,g,1).
kante(e,f,2).
kante(e,g,1).
kante(e,h,7).
kante(i,f,9). % vertauscht
kante(g,h,2).
kante(g,j,9).
kante(i,h,2). % vertauscht
kante(h,k,8).
kante(i,m,2).
kante(j,k,3).
kante(k,m,1).
verbunden(A,B):- kante(A,B,_).
verbunden(A,B):- kante(B,A,_).
tiefensuche(Start,Ziel,Loesung):-tiefensuche(Start,[Start],Ziel,Loesung).
tiefensuche(Ziel,Pfad,Ziel,Loesung):-Loesung = Pfad,!.
tiefensuche(KnotenA,Pfad,Ziel,Loesung):-
verbunden(KnotenA,KnotenN),not(member(KnotenN,Pfad)),
tiefensuche(KnotenN,[KnotenN|Pfad],Ziel,Loesung).