用java写一段利用邻接矩阵得到可达矩阵,判断图是否连通图的代码。 三.实验过程 1.算法分析: 可达矩阵表示图中任意两个节点间的可达关系,而邻接矩阵表示图中任意两个节点的邻接关系。求解邻接矩阵 A^1 〖,A〗^2,A^3……A^n可知任意两个节点之间是否存在互相连通的路,从而判断是否可达。或二元关系传递闭包算法
时间: 2024-02-15 18:04:33 浏览: 64
代码 有向图关联矩阵和邻接矩阵的相互转换算法代码
5星 · 资源好评率100%
,通过计算邻接矩阵的传递闭包来判断图是否连通。
2.代码实现:
```java
public class Graph {
private int[][] adjacencyMatrix;
private int numVertices;
public Graph(int numVertices) {
this.numVertices = numVertices;
adjacencyMatrix = new int[numVertices][numVertices];
}
public void addEdge(int i, int j) {
adjacencyMatrix[i][j] = 1;
adjacencyMatrix[j][i] = 1;
}
public int[][] getReachabilityMatrix() {
int[][] reachabilityMatrix = new int[numVertices][numVertices];
// 初始化可达矩阵为邻接矩阵
for (int i = 0; i < numVertices; i++) {
for (int j = 0; j < numVertices; j++) {
reachabilityMatrix[i][j] = adjacencyMatrix[i][j];
}
}
// 计算可达矩阵
for (int k = 0; k < numVertices; k++) {
for (int i = 0; i < numVertices; i++) {
for (int j = 0; j < numVertices; j++) {
reachabilityMatrix[i][j] = reachabilityMatrix[i][j] | (reachabilityMatrix[i][k] & reachabilityMatrix[k][j]);
}
}
}
return reachabilityMatrix;
}
public boolean isConnected() {
int[][] reachabilityMatrix = getReachabilityMatrix();
// 判断矩阵对角线是否全是1,如果是则表示图是连通的
for (int i = 0; i < numVertices; i++) {
if (reachabilityMatrix[i][i] == 0) {
return false;
}
}
return true;
}
}
```
3.使用示例:
```java
public class Main {
public static void main(String[] args) {
Graph graph = new Graph(4);
graph.addEdge(0, 1);
graph.addEdge(1, 2);
graph.addEdge(2, 3);
boolean isConnected = graph.isConnected();
System.out.println("Is the graph connected? " + isConnected);
}
}
```
该示例代码中,我们创建了一个有4个节点的图,并且建立了0和1,1和2,2和3之间的边。然后我们调用了 `isConnected` 方法来判断图是否是连通的。在这个例子中,输出结果是 `true`。
阅读全文