java dfs算法怎么實(shí)現(xiàn)

小億
97
2024-05-25 10:14:13
欄目: 編程語言

深度優(yōu)先搜索(DFS)是一種用于遍歷或搜索樹或圖的算法,其基本思想是從起始節(jié)點(diǎn)開始,沿著一條路徑盡可能深地搜索,直到到達(dá)葉子節(jié)點(diǎn)或者無法繼續(xù)搜索為止,然后回溯到上一個(gè)節(jié)點(diǎn),選擇另一條路徑繼續(xù)搜索。以下是一個(gè)簡單的Java實(shí)現(xiàn)DFS算法的例子:

import java.util.List;
import java.util.Stack;

public class DFS {

    public void dfs(List<List<Integer>> graph, int start) {
        boolean[] visited = new boolean[graph.size()];
        Stack<Integer> stack = new Stack<>();
        stack.push(start);

        while (!stack.isEmpty()) {
            int node = stack.pop();
            if (!visited[node]) {
                System.out.print(node + " ");
                visited[node] = true;
                for (int neighbor : graph.get(node)) {
                    if (!visited[neighbor]) {
                        stack.push(neighbor);
                    }
                }
            }
        }
    }

    public static void main(String[] args) {
        List<List<Integer>> graph = List.of(
                List.of(1, 2),
                List.of(0, 2, 3),
                List.of(0, 1, 4),
                List.of(1),
                List.of(2)
        );

        DFS dfs = new DFS();
        dfs.dfs(graph, 0);
    }
}

在上面的例子中,我們首先創(chuàng)建了一個(gè)boolean數(shù)組用于記錄節(jié)點(diǎn)是否被訪問過,然后創(chuàng)建一個(gè)棧用于存儲(chǔ)待訪問的節(jié)點(diǎn)。在DFS方法中,從起始節(jié)點(diǎn)開始,不斷地遍歷鄰居節(jié)點(diǎn),并將未訪問過的鄰居節(jié)點(diǎn)加入棧中。當(dāng)棧為空時(shí),表示搜索完成。在main方法中,我們定義了一個(gè)簡單的圖,并調(diào)用dfs方法從節(jié)點(diǎn)0開始進(jìn)行深度優(yōu)先搜索。

0