Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi hab ein problem mit array vergleichen Dijkstra (https://www.delphipraxis.net/70729-hab-ein-problem-mit-array-vergleichen-dijkstra.html)

pagan1900 3. Jun 2006 16:03


hab ein problem mit array vergleichen Dijkstra
 
folgende ausgangslage:

Ein benutzer gibt graphen ein die wie folgt abgespeichert werden
//Tknoten=array[1..8]of word;
//TPfeil=array[1..64]of word

Anfangsknoten,Endknoten,Bewertung //werden also in 3 arrays vom typ Tpfeil gespeichert
------------------------
Der Benutzer gibt nun seine lösung in form von teilpfeilen an
UserI,UserJ //werden in zwei arrays vom typ Tpfeil eingespeichert
----
Als nächstes muss ich an die kosten herankommen (die im oberen teil bestimmt wurden)
so hab ich es versucht:
Delphi-Quellcode:
 procedure TfrmUebung.Button2Click(Sender: TObject);
 var i,j:word;
     locali,localj:word;
 begin
     user_m:=user_m+1;
     i:=strtoint(edit1.Text);
     j:=strtoint(edit2.Text);
     for locali:=1 to m do
       begin
         if (i=Anf[locali])and(j=Ende[locali]) then
          begin
           UserI[locali]:=i;
           UserJ[locali]:=j;
           UserC[locali]:=Kosten[locali];      
          end;
       end;
   end;
Dann bestimme ich für die Benutzerlösung der Kürzesten wege (dijkstra)

Delphi-Quellcode:
procedure TfrmUebung.Button3Click(Sender: TObject);
  var locali:integer;  
      Vergleich:Boolean;
      E,l:word;
  begin
    E:=m;
    l:=1;
    PQuicksort(UserI,UserJ,UserC,l,E);
    PnVektor(UserI,n,m,User_PN);
    Dijkstra_Pfeil(User_pre,User_KW,UserJ,UserC,User_PN,n,Startknoten);  
 
    Vergleich:=User_AlgoGleich(User_KW,Algo_KW);

    If (Vergleich=true) then
     begin
       panel2.Color:=clgreen
     end
     else panel2.Color:=clred;
 end;
end.
und nun vergleiche ich den KWdist der Userlösung und den KWdist die vom programm errechnet wurden
miteinander

Delphi-Quellcode:
 function User_AlgoGleich(User,Algo:TKnoten):Boolean;
   var locali,localj:word;
       ok:boolean;
   begin
   ok:=false;
     for locali:=1 to n do
     begin
       for localj:=1 to n do
        begin
         if (User_KW[locali])=(Algo_KW[localj]) then
           begin
             ok:=true;
           end
           else ok := false;
        end;
     end;
und hier steckt mein problem!! ich weiss das der Algorithmus von dijkstra NUR eine richige lösung zuläst und das wollt e ich mir zu nutze machen, nur irgendwie vergleicht er nicht richtig!
und dann kommt folgendes zu stande:
der Algo sagt: |1|2|3
3|2|2|0
wenn aber
der user z.B. gleich auf den button drückt (er hat z.B. die pfeile vergessen einzugeben)
kommt folgendes herraus:
Userlösung |1 |2 |3
3|999|999|0
und er sagt dann dennoch alles im grünen bereich bei meine fragestellung! Sprich
bei falscher (eigentlich hier offensichtlich) rot, bei richtiger eingabe grün(was er ich macht, aber eigentlich nciht sollte)

hoffe ihr konnt mir helfen bin an dem ding am verzweifeln, so schwehr kann es doch nicht sein zwei arrays zu vergleichen ob deren inhalt gleich ist !

Hawkeye219 3. Jun 2006 16:11

Re: hab ein problem mit array vergleichen Dijkstra
 
Hallo,

vielleicht solltest du die Funktion User_AlgoGleich noch einmal überprüfen. Deine Arrays haben n Elemente, und du benötigst n*n Vergleiche? Außerdem verwendest du die Übergabeparameter innerhalb der Funktion gar nicht...

Gruß Hawkeye

pagan1900 3. Jun 2006 16:17

Re: hab ein problem mit array vergleichen Dijkstra
 
ich kam nur deswegen drauf, da diese arrays ja die inhalte von

kw_dist sind und die laufen hier z.B. von 1->n, da der graph 3 knoten hat
und ich muss doch zwei for schleifen laufen lassen

umd den erstenwert mit allen werten des zweiten arrays zu vergleichen oder sehe ich das zu kompleziert?


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:57 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