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