📅  最后修改于: 2023-12-03 14:49:48.121000             🧑  作者: Mango
这是一个使用深度优先搜索(DFS)算法来检查无向图是否连通的Java程序。
DFS是一种用于遍历或搜索图的算法。在无向图中,我们从任意一个顶点开始进行DFS遍历,如果遍历到的所有顶点都与起始顶点相连,则图是连通的;否则,图是不连通的。
该算法通过递归地访问每个顶点的邻居节点来实现。在访问一个节点时,我们将其标记为已访问,并继续递归地访问其未被访问的邻居节点,直到所有节点都被访问过或没有未被访问的节点为止。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Graph {
private int V;
private List<List<Integer>> adj;
Graph(int v) {
V = v;
adj = new ArrayList<>(v);
for (int i = 0; i < v; ++i)
adj.add(new ArrayList<>());
}
void addEdge(int v, int w) {
adj.get(v).add(w);
adj.get(w).add(v);
}
void DFSUtil(int v, boolean[] visited) {
visited[v] = true;
for (int i : adj.get(v)) {
if (!visited[i])
DFSUtil(i, visited);
}
}
boolean isConnected() {
boolean[] visited = new boolean[V];
Arrays.fill(visited, false);
DFSUtil(0, visited);
for (int i = 0; i < V; ++i) {
if (!visited[i])
return false;
}
return true;
}
}
public class Main {
public static void main(String[] args) {
Graph g = new Graph(5);
g.addEdge(1, 0);
g.addEdge(2, 3);
g.addEdge(3, 4);
if (g.isConnected())
System.out.println("Graph is connected");
else
System.out.println("Graph is not connected");
}
}
Graph
类表示了一个无向图,其中 V
表示顶点数,adj
是一个邻接表,用于存储每个顶点的邻居节点。
addEdge
方法用于添加边,因为是无向图,所以同时需要在两个顶点之间添加边。
DFSUtil
方法是实现DFS算法的核心方法。它使用递归地访问节点的邻居节点,并将访问过的节点标记为已访问。
isConnected
方法用于检查图是否连通。它使用一个辅助数组 visited
来记录每个顶点是否被访问过。首先初始化所有顶点为未访问状态,然后从一个任意顶点开始进行DFS遍历。最后,检查 visited
数组中是否存在未被访问的顶点,如果有则返回 false
,否则返回 true
。
main
方法中创建了一个示例图,并调用 isConnected
方法来检查图是否连通。根据返回结果,打印相应的信息。
如果图是连通的,程序将输出 Graph is connected
;如果图是不连通的,程序将输出 Graph is not connected
。
本Java程序展示了使用DFS算法来检查无向图是否连通的实现。DFS算法是一种常用的图遍历和搜索算法,在解决与图相关的问题时非常有用。使用该算法,我们可以确定图是否连通,从而进行进一步的图处理或分析。