Ergebnis 1 bis 7 von 7

Thema: Prolog - Rekursion - Kürzester Weg

  1. #1
    Unregistriert
    Gast

    Standard Prolog - Rekursion - Kürzester Weg

    Hallo zusammen,

    ich bin schon eine weile dabei ein Prolog Programm zu schreiben mit dem ich den kürzesten Weg ausgeben kann.

    Der Code sieht bisher so aus:


    nachbar(downtown,uptown,6).
    nachbar(downtown,middletown,.
    nachbar(downtown,westtown,2).
    nachbar(middletown,uptown,3).
    nachbar(easttown,uptown,5).
    nachbar(easttown,westtown,4).


    loesung2(Start,Ziel):-
    weg2(Start,Ziel,[Start],Pfad), % Aufruf der Tiefensuche
    write('Pfad: '),
    write(Pfad).


    % weg2(Startknoten, Zielknoten, Liste der besuchten Knoten, Ergebnispfad)

    weg2(Start,Ziel,Liste,Pfad):-
    Start = Ziel, % Rekursionsausstieg, wenn aktueller Knoten mit Zielknoten identisch,
    Pfad = Liste. % dann Übergabe der Liste als Tiefensuchpfad


    weg2(Start,Ziel,Liste,Pfad):-
    neben(Start,Knoten,L), % Ermittlung eines Knotens, der vom Startknoten wegführt
    not(member(Knoten,Liste)), % Prüfung, ob Knoten schon mal besucht wurde (Zyklus)
    weg2(Knoten,Ziel,[Knoten|Liste],Pfad). % Ermittelung der weiteren Wege ausgehend vom gefundenen Knoten zum Ziel,

    neben(X,Y,D):- nachbar(X,Y,D).
    neben(X,Y,D):- nachbar(Y,X,D).



    ...
    Bis jetzt werden einfach alle möglichen Strecken ausgegeben ich bekomme es nichtmal hin einfach die Streckenlängen dann dahinterzuschreiben... Ziel wäre es dann nur den kürzesten Weg auszugeben

    Würde mich über eine hilfreiche Antwort sehr freuen..

    Mfg Tobi
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Prolog - Rekursion - Kürzester Weg

    Wie wärs denn damit:
    Code:
    weg2(Start, Ziel, Liste, Pfad, Länge)
    ...
    weg2(Knoten,Ziel,[Knoten|Liste],Pfad,LS),
    Länge is LS + L. % Gesamtlänge = Länge des vorherigen Weges + Länge des letzten Segments
    In loesung2 kannst du die Länge noch ausgeben. Dann muss da natürlich noch ne Länge beim Abbruch festgelegt werden, aber das schaffst du schon.

    Viele liebe Grüße
    The User

  3. #3
    Unregistriert
    Gast

    Standard AW: Prolog - Rekursion - Kürzester Weg

    hallo User,

    vielen Dank für deine Antwort.. also ich habe das mal probiert und komme irgendwie trotzdem nicht weiter.. also ich werde wohl keine Freund von Prolog.
    Irgendwie kommt nun am Ende immer false raus und keine Ergebnisse.

    ->

    nachbar(downtown,uptown,6).
    nachbar(downtown,middletown,.
    nachbar(downtown,westtown,2).
    nachbar(middletown,uptown,3).
    nachbar(easttown,uptown,5).
    nachbar(easttown,westtown,4).


    loesung2(Start,Ziel):-
    Länge is 0,
    weg2(Start,Ziel,[Start],Pfad,Länge), % Aufruf der Tiefensuche
    write('Pfad: '),
    write(Pfad).


    % weg2(Startknoten, Zielknoten, Liste der besuchten Knoten, Ergebnispfad)

    weg2(Start,Ziel,Liste,Pfad,_Länge):-
    Start = Ziel, % Rekursionsausstieg, wenn aktueller Knoten mit Zielknoten identisch,
    Pfad = Liste. % dann Übergabe der Liste als Tiefensuchpfad


    weg2(Start,Ziel,Liste,Pfad,Länge):-
    neben(Start,Knoten,LS), % Ermittlung eines Knotens, der vom Startknoten wegführt
    not(member(Knoten,Liste)), % Prüfung, ob Knoten schon mal besucht wurde (Zyklus)
    weg2(Knoten,Ziel,[Knoten|Liste],Pfad,LS), % Ermittelung der weiteren Wege ausgehend vom gefundenen Knoten zum Ziel,
    Länge is Länge + LS.

    neben(X,Y,D):- nachbar(X,Y,D).
    neben(X,Y,D):- nachbar(Y,X,D).

    Nach langem probieren kommt zwar keine Exception mehr aber dafür nur noch false. ;(
    Wo liegt mein Fehler?

    Mfg Tobi

  4. #4
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Prolog - Rekursion - Kürzester Weg

    Mach das Länge = 0 einmal weg.

  5. #5
    Unregistriert
    Gast

    Standard AW: Prolog - Rekursion - Kürzester Weg

    hmm.. also wenn ich das wegmache sagt er mir das "Länge" nicht mehr initialisiert wird. Wenn ich dann weg(Start,Ziel,[Start],Pfad,0), anstatt weg(Start,Ziel,[Start],Pfad,Länge), am Anfang schreibe dann gehts zwar wieder aber es kommt dann wieder "false" raus.

    hm ;(

  6. #6
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard AW: Prolog - Rekursion - Kürzester Weg

    Das erste weg2, das Rekursionsende musst du ändern, dort muss _Länge auf 0 gesetzt werden.

  7. #7
    Unregistriert
    Gast

    Standard AW: Prolog - Rekursion - Kürzester Weg

    Hallo,

    also das funktioniert jetzt endlich soweit .. Vielen Dank dafür

    nun kommt ein weiteres Problem auf mich und zwar wollte ich eine Liste neu belegen nur irgendwie nimmt der mir das nicht.. wie bekomme ich es denn hin wenn in einer Liste z.b. Y=[a,b,c]drinsteht das ich ihr z.b. die Werte einer Liste X=[1,2,3] zuweise???

    Y = X geht nicht und Y is X auch irgendwie nicht. Wieso denn nicht? ;(

    Hoffe jemand kann mir weiterhelfen..

    Mfg
    Tobi

Ähnliche Themen

  1. Prolog Labyrinth
    Von zoe im Forum Forum für alle anderen Programmiersprachen
    Antworten: 1
    Letzter Beitrag: 28.07.2008, 13:49
  2. Prolog
    Von Sandra_DD im Forum Forum für alle anderen Programmiersprachen
    Antworten: 0
    Letzter Beitrag: 07.04.2008, 20:32
  3. Prolog?
    Von The User im Forum Forum für alle anderen Programmiersprachen
    Antworten: 0
    Letzter Beitrag: 05.02.2008, 00:05
  4. Prolog Zwischenergebnis nach Rekursion
    Von teeschke im Forum Forum für alle anderen Programmiersprachen
    Antworten: 3
    Letzter Beitrag: 28.10.2007, 23:39
  5. Prolog, Rückschlüsse?
    Von Framgent im Forum Forum für alle anderen Programmiersprachen
    Antworten: 1
    Letzter Beitrag: 18.09.2007, 00:42

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •