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.