Bergervei/Prolog-Das Haus des Nikolaus
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Prolog</language>
== Vollständige Strecken ==
<code id="51294af6f3bb8">
%Festlegung des Graphen (Nikolaushaus)
kante(a,b). kante(b,c). kante(c,d). kante(d,e). kante(e,a).
kante(b,d).
kante(a,d). kante(e,b).
verbunden(A,B):-kante(A,B).
verbunden(A,B):-kante(B,A).
%Rundstrecke
rundstrecke(Route,Weg):-
Route=[Anfang|_],
findall([A,B],
(kante(A,B),element(A,Route),element(B,Route)),
Strecken),
tsuche(Anfang,[Anfang],Weg,Strecken).
%Tiefensuche
tsuche(Knoten,Weg,Weg,[]):-!.
tsuche(Knoten,Teilpfad,Weg,Strecken):-
verbunden(Knoten,NKnoten),
teilliste([Knoten,NKnoten],Strecken),
streichliste([Knoten,NKnoten],Strecken,NStrecken),
tsuche(NKnoten,[NKnoten|Teilpfad],Weg,NStrecken).
%Suche nach allen möglichen Rundstrecken
suche(Route):-
findall(Weg,rundstrecke(Route,Weg),Liste),
ausgabe(Liste).
%Bildschirmausgabe
ausgabe(Liste):-ausgabe_h(Liste,0).
ausgabe_h([],Anzahl):-write('Es gibt '),write(Anzahl),write(' Moeglichkeit(en)!'),nl,!.
ausgabe_h([Weg|Liste],Anzahl):-
ausgabe_l(Weg),nl,
NAnzahl is Anzahl+1,
ausgabe_h(Liste,NAnzahl).
ausgabe_l([X]):-write(X).
ausgabe_l([X|Liste]):-ausgabe_l(Liste),write(', '),write(X).
streichliste([A,B],[[A,B]|L],L):-!.
streichliste([A,B],[[B,A]|L],L):-!.
streichliste(X,[Y|L1],[Y|L2]):-streichliste(X,L1,L2).
teilliste([A,B],[[A,B]|L]):-!.
teilliste([A,B],[[B,A]|L]):-!.
teilliste(X,[Y|L]):-teilliste(X,L).
element(X,[X|L]):-!.
element(X,[Y|L]):-element(X,L).
</code>
<run id="51294af6f3c37">
suche([a,b,c,d,e]).
</run>