Jak implementovat Depth First Search nebo DFS pro graf v Javě?

Jak Implementovat Depth First Search Nebo Dfs Pro Graf V Jave



Depth First Search (DFS) je algoritmus prohledávání grafu procházením, který začíná prozkoumávat každou větev od kořenového uzlu a poté se posouvá co nejhlouběji, aby prošel podél každé větve grafu, než se vrátí zpět. Toto vyhledávání se snadno implementuje a spotřebovává méně paměti ve srovnání s jinými algoritmy procházení. Navštěvuje všechny uzly v připojené komponentě a pomáhá při kontrole cesty mezi dvěma uzly. DFS může také provádět topologické třídění pro grafy, jako je řízený acyklický graf (DAG).

Tento článek ukazuje postup implementace DFS pro zadaný strom nebo graf.

Jak implementovat Depth First Search nebo DFS pro graf v Javě?

DFS se primárně používá k prohledávání grafu návštěvou každé větve/vrcholu přesně jednou. Dokáže detekovat nebo identifikovat cykly v grafu, který pomáhá předcházet uváznutí. Může být použit k řešení hádanek nebo problémů s bludištěm. DFS lze implementovat/použít v grafových algoritmech, procházení webu a návrhu kompilátoru.







Pro vysvětlení navštivte níže uvedený kód hloubkového prvního vyhledávání nebo DFS:



třída Graf {
soukromé Spojový seznam addNode [ ] ;
soukromé booleovský Projeto [ ] ;

Graf ( int vrcholy ) {
addNode = Nový Spojový seznam [ vrcholy ] ;
Projeto = Nový booleovský [ vrcholy ] ;

pro ( int i = 0 ; i < vrcholy ; i ++ )
addNode [ i ] = Nový Spojový seznam ( ) ;
}
prázdnota addEdge ( int src, int Start ) {
addNode [ src ] . přidat ( Start ) ;
}

Popis výše uvedeného kódu:



  • Nejprve třída s názvem „ Graf ' je vytvořen. Uvnitř deklaruje „ Spojový seznam “ s názvem “ addNode[] “ a pole typu boolean s názvem „ Překročeno[] “.
  • Dále předejte vrcholy pro konstruktor „ Graf ” třída jako parametr.
  • Poté se „ pro Vytvoří se smyčka ” pro pohyb přes každý uzel vybrané větve.
  • Nakonec prázdno typu „ addEdge() ” se používá k přidání hran mezi vrcholy. Tato funkce má dva parametry: zdroj vrcholu “ src “ a cílový vrchol “ Start “.

Po vytvoření grafu nyní přidáme kód hloubkového vyhledávání nebo DFS pro výše vytvořený graf:





prázdnota DFS ( int vrchol ) {
Projeto [ vrchol ] = skutečný ;
Systém . ven . tisk ( vrchol + '' ) ;
Iterátor tento = addNode [ vrchol ] . listIterator ( ) ;
zatímco ( tento. hasNext ( ) ) {
int adj = tento. další ( ) ;
-li ( ! Projeto [ adj ] )
DFS ( adj ) ;
}
}

Ve výše uvedeném bloku kódu:

  • Za prvé, „ DFS() “ je vytvořena funkce, která získává “ vrchol “ jako parametr. Tento vrchol je označen jako navštívený.
  • Dále vytiskněte navštívený vrchol pomocí „ out.print() “ metoda.
  • Poté vytvořte instanci souboru „ Iterátor ” iteruje přes sousední vrcholy aktuálního vrcholu.
  • Pokud vrchol nenavštívíme, předá tento vrchol do „ DFS() funkce “.

Nyní vytvoříme „ hlavní() ” funkční část k vytvoření grafu a poté na něj aplikujte DFS:



veřejnost statický prázdnota hlavní ( Tětiva argumenty [ ] ) {
Graf k = Nový Graf ( 4 ) ;
k. addEdge ( 0 , 1 ) ;
k. addEdge ( 1 , 2 ) ;
k. addEdge ( 2 , 3 ) ;
k. addEdge ( 3 , 3 ) ;
Systém . ven . println ( „Následování je hloubka nejprve procházení“ ) ;
k. DFS ( 1 ) ;
}
}

Vysvětlení výše uvedeného kódu:

  • Nejprve vytvořte objekt ' k ' pro ' Graf() “ metoda.
  • Dále, „ addEdge() ” metoda se používá k přidání hran mezi více vrcholy. Tím vzniká struktura našeho grafu.
  • Nakonec předejte jakoukoli hodnotu vrcholu jako argument do již vytvořeného „ DFS() funkce “. Chcete-li najít cestu k vrcholu z kořene, použijte algoritmus prohledávání do hloubky. Například hodnota „ 1 “ je předán do “ DFS() funkce “.

Po skončení fáze kompilace:

Výstup ukazuje, že vyhledávání do hloubky bylo úspěšně implementováno.

Závěr

Depth First Search je algoritmus procházení grafů, který tvoří základ mnoha grafových algoritmů, jako je hledání nejkratší cesty, překlenutí stromů a analýza konektivity. Začíná od kořenového uzlu a poté se přesune tak hluboko, jak je to jen možné, až k opouštěcímu uzlu nebo poslednímu uzlu této větve, než se vrátí zpět. Tento článek demonstroval postup implementace hloubkového vyhledávání nebo DFS pro graf v Javě.