gráf szélességi bejárása

31
Gráf szélességi bejárása SzB(G,p) Szín[v] = Szürke d[v] = d[u] + 1 P[v] = u Sorba(Q,v) szülőjét N il-re állítja. távolságát -1 -re, A zalgoritmusmindenp-től különböző ucsúcsszínét fehérre, A kiinduló p csúcsszínét szürkére változtatjuk, m ert ezt elértnek tekintjük azeljáráskezdetekor. for u ϵ V[G]-{p} Szín[p] = Szürke szin[u] = Fehér d[u] = -1 P[u] = Nil Kiválaszjuk Q sorból azelső szürke csúcsot u-t ésel istávolítjuk a sorból. Főciklus. A ciklusakkorfejeződik be haelfogynak aszürke sorok. Q sort inicializáljuk úgy, hogy abban csak p legyen A kezdő sorelődjét N il-nek választjuk. d[p]értékét nullázzuk. H a a a szom szédsági listában szereplő összescsúcsot m egvizsgáltuk, akkoru csúcsot feketére színezzük. Skip Szín[u] = Fekete Szín[v] = Fehér végül a Q sorvégéhezfűzi a csúcsot. aztán feljegyzi, hogy u a csúcsszülője a d[v]távolságot állítja d[u]+1-re Előszörátszínezi a csúcsot szürkére, m ajd Eza forciklusm egvizsgálja azu szom szédsági listábantalálható összesv csúcsot. H av fehér, azazm égnem értük el akkorazalgoritm useléri azigazágban. for v ϵ Adj[u] P[p] = nil d[p] = 0 ÜresSor(Q) Sorba(Q,p) !Üres(Q) Sorból(Q)

Upload: heidi

Post on 20-Mar-2016

31 views

Category:

Documents


0 download

DESCRIPTION

SzB (G,p). Gráf szélességi bejárása. Tetszőleges gráf, melyben a p csúcsot választottam kiindulónak:. A gráfnak megfelelő fa:. Az algoritmus kiinduló állapota. Kezdetben minden csúcs fehér, kivéve a p csúcsot, amelyik szürke A Q sorban is kezdetben csak a p csúcs van. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Gráf szélességi bejárása

Gráf szélességi bejárása SzB(G,p)

Szín[v] = Szürke

d[v] = d[u] + 1

P[v] = u

Sorba(Q,v)

szülőjét Nil-re állítja.távolságát -1 -re,Az algoritmus minden p-től különböző u csúcs színét fehérre,

A kiinduló p csúcs színét szürkére változtatjuk, mert ezt elértnek tekintjük az eljárás kezdetekor.

for

∀ u ϵ V[G]-{p}

Szín[p] = Szürke

szin[u] = Fehér

d[u] = -1

P[u] = Nil

Kiválaszjuk Q sorból az első szürke csúcsot u-t és el is távolítjuk a sorból.Főciklus. A ciklus akkor fejeződik be ha elfogynak a szürke sorok.

Q sort inicializáljuk úgy, hogy abbancsak p legyen

A kezdő sor elődjét Nil-nek választjuk.d[p] értékét nullázzuk.

Ha a a szomszédsági listában szereplő összes csúcsot megvizsgáltuk, akkor u csúcsot feketére színezzük.

Skip

Szín[u] = Fekete

Szín[v] = Fehér

végül a Q sor végéhez fűzi a csúcsot.aztán feljegyzi, hogy u a csúcs szülőjea d[v] távolságot állítja d[u]+1-reElőször átszínezi a csúcsot szürkére, majd

Ez a for ciklus megvizsgálja az u szomszédsági listában található összes v csúcsot.Ha v fehér, azaz még nem értük el akkor az algoritmus eléri az igaz ágban.

for v ϵ Adj[u]

P[p] = nil

d[p] = 0

ÜresSor(Q)Sorba(Q,p)

!Üres(Q)

Sorból(Q)

Page 2: Gráf szélességi bejárása

Tetszőleges gráf, melyben a p csúcsot választottam kiindulónak:

A gráfnak megfelelő fa:

Page 3: Gráf szélességi bejárása

Az algoritmus kiinduló állapota• Kezdetben minden csúcs fehér, kivéve a p

csúcsot, amelyik szürke• A Q sorban is kezdetben csak a p csúcs

van.• A kezdőcsúcstól való távolság (d[p] értéke)

mindenhol -1 kivéve a kezdőcsúcsot.

Szín[v] = Szürke

d[v] = d[u] + 1

P[v] = u

Sorba(Q,v)

P[p] = nil

d[p] = 0

ÜresSor(Q)Sorba(Q,p)

!Üres(Q)

Sorból(Q)

Skip

Szín[u] = Fekete

Szín[v] = Fehérfor v ϵ Adj[u]

for

∀ u ϵ V[G]-{p}

Szín[p] = Szürke

szin[u] = Fehér

d[u] = -1

P[u] = Nil

Q: p

Page 4: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[v] = Szürke

d[v] = d[u] + 1

P[v] = u

Sorba(Q,v)Szín[u] = Fekete

!Üres(Q)

Sorból(Q)

for v ϵ Adj[u]Szín[v] = Fehér

Skip

Ciklusfeltétel teljesül, Q sor nem üres; belépés a főciklusba.

Q: p

Page 5: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[v] = Szürke

d[v] = d[u] + 1

P[v] = u

Sorba(Q,v)

!Üres(Q)

Sorból(Q)

for v ϵ Adj[u]Szín[v] = Fehér

Skip

Szín[u] = Fekete

Első elem (p) kivétele a sorból.

Q:

Page 6: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[v] = Szürke

d[v] = d[u] + 1

P[v] = u

Sorba(Q,v)

!Üres(Q)

Sorból(Q)

q ϵ Adj[p]

Szín[v] = Fehér

Skip

Szín[u] = Fekete

A belső for ciklus megvizsgálja a p-hez tartozó szomszédsági lista (Adj[p]) első elemét q-t.Ciklusfeltétel teljesül, belépés a ciklusba

Adj[p]: q r

Q:

Page 7: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[v] = Szürke

d[v] = d[u] + 1

P[v] = u

Sorba(Q,v)

!Üres(Q)

Sorból(Q)

q ϵ Adj[p]

Szín[q] = Fehér

Skip

Szín[u] = Fekete

Mivel q csúcs még fehér, ezért az igaz ág hajtódik végre.

Adj[p]: q r

Q:

Page 8: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[q] = Szürke

d[v] = d[u] + 1

P[v] = u

Sorba(Q,v)Szín[u] = Fekete

!Üres(Q)

Sorból(Q)

q ϵ Adj[p]

Szín[q] = Fehér

Skip

q csúcs legyen szürkeAdj[p]: q r

Q:

Page 9: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[q] = Szürke

d[q] = 0 + 1

P[v] = u

Sorba(Q,v)

!Üres(Q)

Sorból(Q)

q ϵ Adj[p]

Szín[q] = Fehér

Skip

Szín[u] = Fekete

d[q] távolság átállítása d[p]+1 = 1-re

Adj[p]: q r

Q:

Page 10: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[q] = Szürke

d[q] = 0 + 1

P[q] = p

Sorba(Q,v)Szín[u] = Fekete

!Üres(Q)

Sorból(Q)

q ϵ Adj[p]

Szín[q] = Fehér

Skip

Annak följegyzése, hogy q csúcs szülőpointere: p

Adj[p]: q r

Q:

Page 11: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[q] = Szürke

d[q] = 0 + 1

P[q] = u

Sorba(Q,q)Szín[u] = Fekete

!Üres(Q)

Sorból(Q)

q ϵ Adj[p]

Szín[q] = Fehér

Skip

Az aktuális q csúcsot hozzáfűzi a sorhoz.

Adj[p]: q r

Q: q

Page 12: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[q] = Szürke

d[q] = 0 + 1

P[q] = u

Sorba(Q,q)

!Üres(Q)

Sorból(Q)

r ϵ Adj[p]

Szín[q] = Fehér

Skip

Szín[u] = Fekete

A belső for ciklus megvizsgálja a p-hez tartozó szomszédsági lista (Adj[p]) második elemét r-t.Ciklusfeltétel teljesül, belépés a ciklusba.

Adj[p]: q r

Q: q

Page 13: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[q] = Szürke

d[q] = 0 + 1

P[q] = u

Sorba(Q,q)

!Üres(Q)

Sorból(Q)

r ϵ Adj[u]

Szín[r] = Fehér

Skip

Szín[u] = Fekete

Mivel r csúcs még fehér, ezért az igaz ág hajtódik végre.

Adj[p]: q r

Q: q

Page 14: Gráf szélességi bejárása

Szín[r] = Szürke

d[q] = 0 + 1

P[q] = u

Sorba(Q,q)Szín[u] = Fekete

!Üres(Q)

Sorból(Q)

r ϵ Adj[u]

Szín[r] = Fehér

Skip

Az algoritmus működés közben:r csúcs legyen szürkeAdj[p]: q r

Q: q

Page 15: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[r] = Szürke

d[r] = 0 + 1

P[q] = u

Sorba(Q,q)

!Üres(Q)

Sorból(Q)

r ϵ Adj[u]

Szín[r] = Fehér

Skip

Szín[u] = Fekete

Az algoritmus működés közben:d[r] távolság átállítása d[p]+1 = 1-re

Adj[p]: q r

Q: q

Page 16: Gráf szélességi bejárása

Az algoritmus működés közben:Az algoritmus működés közben:

Szín[r] = Szürke

d[r] = 0 + 1

P[r] = u

Sorba(Q,q)Szín[u] = Fekete

!Üres(Q)

Sorból(Q)

r ϵ Adj[u]

Szín[r] = Fehér

Skip

Annak följegyzése, hogy r csúcs szülőpointere: p

Adj[p]: q r

Q: q

Page 17: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[r] = Szürke

d[r] = 0 + 1

P[r] = u

Sorba(Q,r)

!Üres(Q)

Sorból(Q)

r ϵ Adj[u]

Szín[r] = Fehér

Skip

Szín[u] = Fekete

Adj[p]: q r Az aktuális r csúcsot hozzáfűzi a sorhoz.

Q: q r

Page 18: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[r] = Szürke

d[r] = 0 + 1

P[r] = u

Sorba(Q,r)

!Üres(Q)

Sorból(Q)

r ϵ Adj[u]

Szín[r] = Fehér

Skip

Szín[p] = Fekete

Adj[p]: q r A belső for ciklus végigment a p-hez tartozó szomszédsági listán, p csúcsot feketére állítja.

Q: q r

Page 19: Gráf szélességi bejárása

Az algoritmus működés közben:Ciklusfeltétel teljesül, Q sor nem üres; belépés a főciklusba.

Szín[v] = Szürke

d[v] = d[u] + 1

P[v] = u

Sorba(Q,v)Szín[u] = Fekete

!Üres(Q)

Sorból(Q)

for v ϵ Adj[u]Szín[v] = Fehér

Skip

Q: q r

Page 20: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[v] = Szürke

d[v] = d[u] + 1

P[v] = u

Sorba(Q,v)

!Üres(Q)

Sorból(Q)

for v ϵ Adj[u]Szín[v] = Fehér

Skip

Szín[u] = Fekete

Első elem (q) kivétele a sorból.

Q: r

Page 21: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[v] = Szürke

d[v] = d[u] + 1

P[v] = u

Sorba(Q,v)Szín[u] = Fekete

!Üres(Q)

Sorból(Q)

s ϵ Adj[q]

Szín[v] = Fehér

Skip

A belső for ciklus megvizsgálja a q-hoz tartozó szomszédsági lista (Adj[q]) első elemét s-t.Ciklusfeltétel teljesül, belépés a ciklusba

Adj[q]: s t u x

Q: r

Page 22: Gráf szélességi bejárása

Az algoritmus működés közben:Adj[q]: s t u x A belső ciklus lefutása utáni

állapot.A szomszédsági lista összes eleme bekerült Q-ba és színük szürkére lett állítva

Szín[v] = Szürke

d[v] = d[u] + 1

P[v] = u

Sorba(Q,v)

!Üres(Q)

Sorból(Q)

s ϵ Adj[q]

Szín[v] = Fehér

Skip

Szín[u] = Fekete

Q: r s t u x

Page 23: Gráf szélességi bejárása

Az algoritmus működés közben:

Szín[v] = Szürke

d[v] = d[u] + 1

P[v] = u

Sorba(Q,v)Szín[q] = Fekete

!Üres(Q)

Sorból(Q)

s ϵ Adj[q]

Szín[v] = Fehér

Skip

Q: r s t u x

Q csúcs átszínezése feketéreAdj[q]: s t u x

Page 24: Gráf szélességi bejárása

Az algoritmus működés közben:Q: s t u x y

Adj[r]: x y

Page 25: Gráf szélességi bejárása

Az algoritmus működés közben:Q: t u x y

Adj[s]:

Page 26: Gráf szélességi bejárása

Az algoritmus működés közben:Q: u x y v

Adj[t]: v

Page 27: Gráf szélességi bejárása

Az algoritmus működés közben:Q: x y v

Adj[u]: v

Page 28: Gráf szélességi bejárása

Az algoritmus működés közben:Q: y v

Adj[x]:

Page 29: Gráf szélességi bejárása

Az algoritmus működés közben:Q: v

Adj[y]:

Page 30: Gráf szélességi bejárása

Az algoritmus működés közben:Q: w

Adj[v]: w

Page 31: Gráf szélességi bejárása

Az algoritmus működés közben:Q:

Adj[w]: