Szélességi keresés (algoritmus)
A Programozás Wiki wikiből
A szélességi keresés (breadth-first search) egy olyan fabejárási algoritmus, amely a fában a gyökértől kiindulva minden csúcsot bejárja. Az algoritmus lényege, hogy a fában igyekszik először a gyökérhez közelebbi csúcsokat átvizsgálni, és csak azután folytatja a keresést a mélyebb csúcsokon.
Programozási nyelvekben a megvalósítás általában sorral lehetséges.
Szélességi fabejárási példa Object Pascal ban:
procedure BreadthFirst( Root: TNode; Stream: TStream ); var Q: TNodeQueue; Node: TNode; i: Integer; begin Q := TNodeQueue.Create; Q.Push( Root ); while not Q.Empty do begin Node := Q.Pop; Node.Write( Stream ); for i := 0 to Node.ChildCount-1 do Q.Push( Node.Child(i) ); end; Q.Free; end;
Az algoritmus fenti formája kört tartalmazó gráfok esetén végtelen ciklusba kerül. A probléma orvosolható, ha az elemeket a sorba helyezéskor megjelöljük, és csak a jelöletlen elemeket engedjük a későbbiekben felvenni a sorba.