Mélység első keresési algoritmus Python használatával

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ő:

  1. Kezdje a gyökér csomópontnál, és nyomja rá a veremre.
  2. ellenőrizze a fa szomszédos csomópontjait, és válasszon ki egy csomópontot.
  3. keresse meg a kiválasztott csomópont teljes ágát, és nyomja be az összes csomópontot a verembe.
  4. 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.
  5. 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:

8. kép
példa grafikon

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.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.

More: