说明
输入矩阵形式的图,matrix[i][j] 值为 1 说明边 i 与边 j 相连。
定义一个 visited[] 的 Boolean 数组,为 true 表示此边已经访问过。
算法时间复杂度: n的平方
可以优化为: n的平方/2
步骤
1、访问每行数据,如果已经访问过,跳过;
2、如果没有访问过:连通子图数量+1,将此边 visite 设置为 true。并深度遍历此连通子图,将此连通子图的所有边设置为 visited。
public class Practice {
public static void main(String[] args){
int[][] num = new int[][]{{1,0,0,1},{0,1,1,0},{0,1,1,1},{1,0,1,1}};
Practice test = new Practice();
System.out.println(test.findCircleNum(num)); //输出连通子图数量
}
private boolean[] visited;
private int len;
public int findCircleNum(int[][] isConnected) {
if(isConnected.length == 0 || isConnected[0].length == 0){
return 0;
}
len = isConnected.length;
int rs = 0;
visited = new boolean[len];
for(int i = 0; i < len; i++){
visited[i] = false;
}
for(int i = 0; i < len; i++){
if(!visited[i]) {
rs++;
visit(isConnected, i);
}
}
return rs;
}
public void visit(int[][] graph, int l){
if(!visited[l]) {
visited[l] = true;
for (int i = 0; i < len; i++) {
if(graph[l][i] == 1){
visit(graph, i);
}
}
}
}
}```