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

Post on 20-Mar-2016

32 views 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 of 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)

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.• 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

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

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:

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:

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:

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:

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:

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:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Adj[r]: x y

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

Adj[s]:

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

Adj[t]: v

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

Adj[u]: v

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

Adj[x]:

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

Adj[y]:

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

Adj[v]: w

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

Adj[w]: