AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Travelling Salesman Problem - Backtracking mit Listen
Thema durchsuchen
Ansicht
Themen-Optionen

Travelling Salesman Problem - Backtracking mit Listen

Offene Frage von "scolia"
Ein Thema von scolia · begonnen am 13. Jun 2006 · letzter Beitrag vom 13. Jun 2006
Antwort Antwort
scolia

Registriert seit: 13. Jun 2006
Ort: Marburg
2 Beiträge
 
#1

Travelling Salesman Problem - Backtracking mit Listen

  Alt 13. Jun 2006, 11:49
Hallo,

ich programmiere ein Tool, das den kürzesten Weg finden soll, um n Postleitzahlen abzuklappern. Ich habe hier keinerlei Optimierung eingebaut sondern versuche einfach durch Durchgehen aller Möglichkeiten den kürzesten Weg zu finden.

Das Programm an sich steht - ich kann die Entfernung zweier PLZ berechnen (mithilfe von OpenGeoDB). Blöderweise will der Backtracking-Algorithmus nicht so ganz.

Kann sich das mal jemand anschauen?
Ich habe das komplette Projekt angehängt und hier die Backtracking-Prozedur:

Delphi-Quellcode:
procedure search(resList:TPlzList;distance:extended);
  VAR curLength : integer;
      srcList,temp : TPlzList;
      newDistance : extended;
begin
   srcList := PlzList;
   while (srcList <> NIL) do begin
       new(temp);
       temp^.plz := srcList^.plz;
       temp^.coord := srcList^.coord;
       temp^.next := NIL;
       if resList = NIL then begin
        resList := temp;
         end
       else
        resList^.next := temp;
       newDistance := distance + getDistance(temp^.coord,resList^.coord);
       if countList(resList) < countList(PlzList) then begin
       showmessage(resList^.plz);
         search(resList^.next,newDistance);
         end
       else if ((MinDist = 0) OR (newDistance < MinDist)) then begin
         MinList := resList;
         MinDist := newDistance;
       end;
       srcList := srcList^.next;
   end;
end;
PlzList enthält alle PLZ, zu denen ich muss. getDistance() gibt mir die Entfernung zweier Koordinaten. In MinList will ich am Ende die kürzeste Reihenfolge der PLZ haben, in MinDist die dazugehörige Länge.

Wäre toll wenn mir jemand helfen kann.

Schöne Grüße,
Tim
Angehängte Dateien
Dateityp: zip ew_193.zip (465,7 KB, 13x aufgerufen)
  Mit Zitat antworten Zitat
Udontknow

Registriert seit: 17. Jun 2002
223 Beiträge
 
#2

Re: Travelling Salesman Problem - Backtracking mit Listen

  Alt 13. Jun 2006, 15:27
Hallo!

Was genau ist denn dein Problem? Gibt es eine Fehlermeldung? Wenn ja, welche?

Cu,
Udontknow
  Mit Zitat antworten Zitat
scolia

Registriert seit: 13. Jun 2006
Ort: Marburg
2 Beiträge
 
#3

Re: Travelling Salesman Problem - Backtracking mit Listen

  Alt 13. Jun 2006, 15:41
Hi,

es gibt eine AccessViolation bei showmessage(resList^.plz);.
Dieses Objekt müsste aber eigentlich existieren, da ich ja resList ja vorher auf temp gelegt habe.

Mache ich meine Liste eventuell mit der Funktion countList kaputt? Die sieht so aus:

Delphi-Quellcode:
function countList (VAR pointer:TPlzList) : integer;
  VAR counter:integer;
begin
   counter := 0;
   while pointer <> NIL do begin
     counter := counter + 1;
     pointer := pointer^.next;
   end;
   countList := counter;
end;
Schöne Grüße,

Tim
  Mit Zitat antworten Zitat
bockhop

Registriert seit: 13. Jun 2006
Ort: Berlin
1 Beiträge
 
#4

Re: Travelling Salesman Problem - Backtracking mit Listen

  Alt 13. Jun 2006, 15:51
Hi Tim,

deine Vermutung ist richtig.
Du zerstörst aber nicht die Liste, sondern den Zeiger auf den ersten Eintrag.

Innerhalb deiner function countList mit einen temporären Zeiger arbeiten.

Liebe Grüße, Tim
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Travelling Salesman Problem - Backtracking mit Listen

  Alt 13. Jun 2006, 19:03
bruteforce? optimierung? backtracking? bau dir doch einfach einen A*... ressourcen im netz gibts dazu massig.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz