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>