Einzelnen Beitrag anzeigen

QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#5

AW: suche hilfe für Graphentheorie mit BFS

  Alt 14. Aug 2011, 17:52
Eingabe: Ein Graph G=(V,E)
Ausgabe: Eine Nummerierung bfsnum : V ==> {1,...|V|}
Delphi-Quellcode:

   Forall v (element) V do bfsnum(v):=0;
   count:=1;
   queue:=0;
   while es ein v(element)V mit bfsnum(v)=0 exsitiert
     do begin
       wähle v(element)V mit bfsnum(v)=0;
       bfsnum(v):=count;
       inc(count);
       push(queue,v);
       while queue <>0
       do begin
   v:=pop(queue);
   forall w(element)N(v) mit bfsnum(w)=0
   do begin
          bfsnum(w):=count;
          inc(count);
          push(queue,w);
      end;
     end;
     end;
     end.
Danke...
ich versuch das mal zu übersetzen weil ich es gerade gut gebrauchen kann.



Delphi-Quellcode:
  //I will use containers instead of states, so "waiting" is the default
  WaitingContainer.LoadFromStream(graphStream); //Forall v (element) V do bfsnum(v):=0;
  //count:=1; // count:=1;
  //queue:=0; // queue:=0;

  while WaitingContainer.count > 0 do //while es ein v(element)V mit bfsnum(v)=0 exsitiert
  begin
                                                       //wähle v(element)V mit bfsnum(v)=0;
    SelectedNode := WaitingContainer[0];

    //Change node state top "open" //bfsnum(v):=count;
    WaitingContainer.delete(0);
    OpenContainer.Add(SelectedNode); //OpenContainer.count //inc(count);
 
    
    
    Queue.enqueue(SelectedNode); //push(queue,v);
    while Queue.count > 0 do //while queue <>0 do
    begin
      SelectedNode := Queue.Dequeue; //v:=pop(queue);
      for SelectedSubNode in SelectedNode.Nodes do //for w(element)N(v) mit bfsnum(w)=0 do
      begin
        i := WaitingContainer.indexOf(SelectedSubNode);
        if i > 0 then
        Begin
          WaitingContainer.delete(i); //bfsnum(w):=count;
          OpenContainer.Add(SelectedSubNode); //OpenContainer.count //inc(count);
          Queue.Enqueue(SelectedSubNode); //push(queue,w);
        end;
      end;
    end;
  end;
Weil es mir so noch nichts bringt, muss ich noch den WaitigContainer rausschmeißen und mit OpenContainer und CloseContainer arbeiten....

Weil ich ja unmöglich im voraus das gesammte Internet in den WaitingContainer laden kann...
Und mit nem OpenContainer und CloseContainer kann das dingen schon mal ne zeit lang arbeiten bevor dem Computer die Ressourcen ausgehen.
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (14. Aug 2011 um 18:13 Uhr)
  Mit Zitat antworten Zitat