Gráf szélességi bejárása
Általános leírás Az eljárás célja egy véges gráf összes csúcsának bejárása a kezdőcsúcstól való távolságuk szerinti növekvő sorrendben A bejárt csúcsok sorrendje „szintfolytonos” lesz, azaz először az 1, majd a 2 távolságra lévő csúcsokat dolgozzuk fel, majd így tovább Ha egy csúcsot már bejártunk, a későbi odajutásoktól el kell tekinteni Azonos távolság esetén a sorrend nem definiált
ADS szintű megvalósítás Alkalmazzunk sor adattípust a szemléltetéshez! A sorban csak k vagy k+1 távolságú csúcsok lehetnek az elérésük sorrendjében, amely egyben a k-tól való távolságuk növekedő sorrendje Ameddig ki nem ürül a sor, vegyük ki az első elemet, írjuk ki és a még sorra nem került szomszédjait rakjuk be a sorba.
Kiegészítés Csúcsonként tárolt információk: csúcs kiírási sorszáma kezdőcsúcstól való távolság (kezdetben –1) Csúcsok lehetséges státuszai: fehér: még nem értük el a csúcsot szürke: elértük, de nincs kiírva fekete: kiírtuk és továbbhaladtunk a szomszédaihoz Kezdetben minden csúcs fehér, csak az első szürke
Szemléletesen
Lépések Kivesszük a sorból az 1-es csúcsot Elérjük az 1-es csúcs még fehér szomszédait, behelyezzük őket a sorba, majd szürkítünk 1-es csúcsot feketítjük
… és így tovább minden egyes csúcsra
Végső állapot
Megvalósítás ábrázolás szinten, éllistával szín[1..n] – csúcsokkal indexelt tömb, amely a csúcsok színét tárolja d[1..n] – csúcsok távolsága a kezdőponttól P[1..n] – csúcsokhoz vezető úton a megelőző csúcs Kezdeti állapot: minden csúcs végtelen távolságra van a kezdőcsúcstól
Struktogram
Műveletigény A szélességi bejárás műveletigénye az ábrázolás függvényében (nem tesszük fel, hogy összefüggő a gráf!): Éllistást ábrázolás: T(n) = Θ(n) + Ο(e) = Ο(n + e) ahol az éllisták együttes hossza e Csúcsmátrixos ábrázolás: T(n) = O(n + n * n) = O(n2 )