深度优先遍历

title

深度优先搜索(DFS,Depth-First Search)是一种常见的图遍历算法。它沿着图的深度遍历图的节点,尽可能深地搜索图的分支。一旦到达无法前进的节点,就返回到最近的一个有未搜索分支的节点,继续搜索。整个过程可以用递归实现,也可以用栈来实现。DFS在找到目标节点的路径时比较有效,但不保证找到最短路径。

具体来说,DFS从图的某个节点开始,标记该节点为已访问,然后访问它的所有未访问过的相邻节点,并对每个相邻节点递归地执行同样的操作。这样,DFS遍历整个图,直到所有节点都被访问为止。

以下是DFS的Java代码实现:

public class Graph {
    private int V;  //节点数
    private LinkedList<Integer> adj[];  //邻接表

    Graph(int v) {
        V = v;
        adj = new LinkedList[v];
        for (int i = 0; i < v; i++) {
            adj[i] = new LinkedList<>();
        }
    }

    void addEdge(int v, int w) {
        adj[v].add(w);
    }

    void DFSUtil(int v, boolean visited[]) {
        visited[v] = true;
        System.out.print(v + " ");
        Iterator<Integer> i = adj[v].listIterator();
        while (i.hasNext()) {
            int n = i.next();
            if (!visited[n]) {
                DFSUtil(n, visited);
            }
        }
    }

    void DFS(int v) {
        boolean visited[] = new boolean[V];
        DFSUtil(v, visited);
    }
}

public class Main {
    public static void main(String[] args) {
        Graph g = new Graph(4);
        g.addEdge(0, 1);
        g.addEdge(0, 2);
        g.addEdge(1, 2);
        g.addEdge(2, 0);
        g.addEdge(2, 3);
        g.addEdge(3, 3);

        System.out.println("Following is Depth First Traversal " + "(starting from vertex 2)");
        g.DFS(2);
    }
}

在这个例子中,我们使用邻接表来表示图,其中的DFS方法以一个节点为参数,从该节点开始遍历整个图。我们使用一个visited数组来跟踪哪些节点已经被访问。在遍历过程中,每访问一个节点,我们将其标记为已访问,并递归访问其所有未访问的邻居节点。

powered by Gitbook© 2023 编外计划 | 最后修改: 2023-11-24 03:37:00

results matching ""

    No results matching ""