欢迎访问宙启技术站
智能推送

如何在Java中实现图的遍历函数

发布时间:2023-07-02 20:22:28

在Java中实现图的遍历函数,一般有两种常用的遍历算法:深度优先搜索(DFS)和广度优先搜索(BFS)。

1. 深度优先搜索(DFS):

深度优先搜索是一种递归的图搜索算法。首先选择一个起始节点,然后遍历与该节点相邻的所有未访问过的节点,直到没有未访问的节点为止,然后回溯到上一层继续遍历其他未访问的节点,直到所有节点都被访问到为止。

以下是实现DFS的Java代码:

import java.util.*;

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

    public 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);
    }

    // 从顶点 v 开始深度优先遍历
    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 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("深度优先遍历结果:");
        g.DFS(2);
    }
}

2. 广度优先搜索(BFS):

广度优先搜索是一种逐层搜索的图遍历算法。首先选择一个起始节点,将其加入队列中,然后依次访问队列中的节点,并将其与之相邻的未访问过的节点加入队列中,直到队列为空为止。

以下是实现BFS的Java代码:

import java.util.*;

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);
    }

    // 从顶点 v 开始广度优先遍历
    void BFS(int v) {
        boolean visited[] = new boolean[V];
        LinkedList<Integer> queue = new LinkedList<>();

        visited[v] = true;
        queue.add(v);

        while (queue.size() != 0) {
            v = queue.poll();
            System.out.print(v+" ");

            Iterator<Integer> i = adj[v].listIterator();
            while (i.hasNext()) {
                int n = i.next();
                if (!visited[n]) {
                    visited[n] = true;
                    queue.add(n);
                }
            }
        }
    }

    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("广度优先遍历结果:");
        g.BFS(2);
    }
}

通过以上两种方式,可以在Java中实现图的遍历函数(深度优先搜索和广度优先搜索)。根据具体需求和图的结构选择不同的算法以实现对图的遍历操作。