Einzelnen Beitrag anzeigen

pagan1900

Registriert seit: 27. Mär 2006
25 Beiträge
 
#1

hab ein problem mit array vergleichen Dijkstra

  Alt 3. Jun 2006, 17:03
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 !
  Mit Zitat antworten Zitat