自学内容网 自学内容网

图搜索算法详解

图搜索算法是解决图中路径查找和图遍历等问题的关键算法之一。其中最常见的图搜索算法包括深度优先搜索(DFS)和广度优先搜索(BFS)。下面我会简要介绍这两种算法,并提供 Java 代码示例。

1. 深度优先搜索 (DFS)

DFS 是一种递归的搜索算法,其基本思想是尽可能深地搜索图的分支,直到不能再继续为止,然后回溯到前一步选择的另一个分支,继续搜索。

Java 代码示例:

import java.util.*;

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

2. 广度优先搜索 (BFS)

BFS 是一种以层次顺序逐层扩展搜索的策略。在搜索过程中,先访问当前节点的所有邻居节点,然后依次访问这些邻居节点的邻居节点,以此类推。

Java 代码示例:

import java.util.*;

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 BFS(int s) {
        boolean visited[] = new boolean[V];
        LinkedList<Integer> queue = new LinkedList<Integer>();

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

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

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

以上是简单的 Java 代码示例,用于实现图的深度优先搜索和广度优先搜索。你可以根据自己的需要进一步扩展这些代码,并应用于特定的图搜索问题。


原文地址:https://blog.csdn.net/weixin_43784341/article/details/138861569

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!