kedves olvasók, ebben a cikkben bemutatom a mélység első keresés (DFS) fogalmát. Ez egy grafikon koncepció, amely sok versenyképes kódolási vizsgán gyakori probléma. Tehát nézzük meg a DFS bejárás létrehozását a Python segítségével.
Tartalomjegyzék
mi az első mélységi keresés?
a mélység-első keresés egy algoritmus, amely a verem adatszerkezetét használja a gráfok és fák bejárására. A mélység-első keresés fogalma a “mélység”szóból származik. A fa egy ág mélységéig halad, majd vissza a többi csomópontig.
Vegyünk egy üres “Veremet”, amely tartalmazza az egyes iterációk meglátogatott csomópontjait. Feladatunk itt a következő:
- Kezdje a gyökér csomópontnál, és nyomja rá a veremre.
- ellenőrizze a fa szomszédos csomópontjait, és válasszon ki egy csomópontot.
- keresse meg a kiválasztott csomópont teljes ágát, és nyomja be az összes csomópontot a verembe.
- miután elérte az ág végét (nincs több szomszédos csomópont), azaz az n-edik levélcsomópontot, lépjen vissza egyetlen lépéssel, és keresse meg az n-1.csomópont szomszédos csomópontjait.
- ha vannak szomszédos csomópontok az n-1.csomóponthoz, akkor keresztezze ezeket az ágakat, és nyomja a csomópontokat a verembe.
koncepció mélység első keresés illusztrált
nézzük meg a példa alábbi grafikonon:
a A gyökércsomópont. Tehát mivel a látogatott, akkor nyomja ezt rá a verem.
Stack : A
menjünk az ág A-B. B nem látogatott, így megyünk B és nyomja B rá a verem.
Stack : A B
most elérkeztünk az A-B águnk végéhez, és az n-1. csomóponthoz lépünk, ami A. most megnézzük az a szomszédos csomópontját, ami S. látogassa meg S-t, és nyomja rá a veremre. Most meg kell haladnia az S-C-D ágat, egészen a mélységig, azaz D-ig, és jelölje meg az S, C, D-t a meglátogatott módon.
Stack: A B S C D
mivel D-nek nincs más szomszédos csomópontja, lépjen vissza C-be, és haladjon a szomszédos E-H-G ágával a mélységig, és nyomja őket a verembe.
Stack : A B S C D E H G
a D elérésekor csak egy szomszédos csomópont van, azaz F, amelyet nem látogatnak meg. Nyomja meg az F-et a veremre is.
Stack : A B S C D E H G F
ez a verem maga a DFS bejárása.
kódolási mélység első keresési algoritmus a Pythonban
mint tudnia kell, számos módszer létezik egy gráf ábrázolására, amely a szomszédsági lista és a szomszédsági mátrix.
tehát a következő példában meghatároztam egy szomszédsági listát a grafikonunk minden csomópontjára.
graph1 = { 'A' : , 'B' : , 'C' : , 'D' : , 'E' : , 'F' : , 'G' : , 'H' : , 'S' : }
Megjegyzés: Ezt a szomszédsági listát a felhasználó adhatja meg, és nem kell kódolni.
most meghatározzuk a DFS függvényünket, amely 3 paramétert vesz fel bemenetként – a gráfot (szomszédsági lista), egy csomópontot és a meglátogatott csomópontok listáját.
ha az aktuális csomópontot nem látogatják meg, azaz nem szerepel a meglátogatott listában, jelölje meg látogatottként, majd fűzze hozzá a meglátogatott listához.
lépjen a következő csomópontra, majd rekurzívan adja át ezt a csomópontot a DFS függvénynek. Így minden csomópont a mélységig mozog, és DFS kimenetként nyomtatja ki.
def dfs(graph, node, visited): if node not in visited: visited.append(node) for k in graph: dfs(graph,k, visited) return visitedvisited = dfs(graph1,'A', )print(visited)
teljes kód és kimenet
graph1 = { 'A' : , 'B' : , 'C' : , 'D' : , 'E' : , 'F' : , 'G' : , 'H' : , 'S' : }def dfs(graph, node, visited): if node not in visited: visited.append(node) for k in graph: dfs(graph,k, visited) return visitedvisited = dfs(graph1,'A', )print(visited)
a fenti kód kimenete a következő:
következtetés
remélem, hogy követte ezt a bemutatót a DFS algoritmusról, és megértette a kódot és a példát is. Próbáld ki toll és papír segítségével, hogy jobban megértsd a bejárásokat.