Algoritmi
Syvyyssuuntainen läpikäynti voidaan ilmaista vapaamuotoisesti seuraavasti:- Edetään aloitussolmusta lähtien mahdollisimman pitkälle.
- Peruutetaan, kunnes löytyy haara, jota ei ole käyty läpi.
- Edetään siitä lähtien mahdollisimman pitkälle...
- Toistetaan, kunnes kaikki aloitussolmusta saavutettavat solmut ovat käyty läpi.
- Toistetaan algoritmia asettamalla yhä uudestaan aloitussolmuksi solmu, jota ei ole vielä käyty läpi.
- Värjätään solmuja kolmella vaihtoehtoisella värillä (valkoinen, harmaa tai musta eli koskematon, edetty tai kokonaan läpikäyty).
- Lyödään solmuihin ”aikaleima”, ennen kuin solmuun edetään tai siitä peruutetaan pois.
- Tallennetaan polut merkitsemällä jokaiselle solmulle edeltäjä.
- Merkitään käsiteltävä solmu harmaalla värillä ja aikaleimalla.
- Kasvatetaan aikaa.
- Toistetaan algoritmi jokaiselle vierussolmulle.
- Nyt solmu käyty kokonaan läpikäyty.
- Värjätään käsiteltävä solmu mustaksi ja kasvatetaan aikaa.
aika: globaali muuttuja, joka kertoo montako kertaa yhteensä ollaan edetty tai peruutettu
record solmu
viereiset: solmusta on yhteys näihin solmuihin
väri: VALKOINEN, HARMAA tai MUSTA (koskematon, edetty tai kokonaan läpikäyty)
edeltäjä: edellinen solmu edetyllä polulla
löydetty: aika, jolloin solmuun edettiin
läpikäyty: aika, jolloin solmu oli kokonaan läpikäyty ja siitä peruutettiin pois
end record
record verkko
solmut: kaikki verkon solmut
end record
function dfs(G: verkko)
for each v in G.solmut
v.väri := VALKOINEN
v.edeltäjä := null
aika := 0
for each v in G.solmut
if v.väri = VALKOINEN
vieraile(v)
function vieraile(u: solmu)
u.väri := HARMAA
aika := aika + 1
u.löydetty := aika
for each v in u.viereiset
if v.väri = VALKOINEN
v.edeltäjä := u
vieraile(v)
u.väri := MUSTA
aika := aika + 1
u.läpikäyty := aika
Lähteet