朋友圈
考察知识点:无向连通图的个数
方法1:DFS
方法2:BFS
//DFS
public static void main(String[] args) {
int[][] a = {{1,1,0},{1,1,0},{0,0,1}};
System.out.println(findCircleNum(a)); //result=2
}
public static int findCircleNum(int[][] a){
int n = a.length; //表示总的人数
int[] vis = new int[n]; //访问数组 0为未访问
int cnt=0;
for(int i=0;i<n;i++){
if(vis[i]==0){
dfs(a,i,vis);
cnt++;
}
}
return cnt;
}
public static void dfs(int[][] a,int pos,int[] vis){
vis[pos]=1;
for(int i=0;i<a[0].length;i++){
if(vis[i]==0 && a[pos][i]==1){
dfs(a,i,vis);
}
}
}
//BFS
public static void main(String[] args) {
int[][] a = {{1,1,0},{1,1,0},{0,0,1}};
System.out.println(findCircleNum(a));
}
public static int findCircleNum(int[][] a){
int n = a.length;
int[] vis = new int[n];
int cnt=0;
Queue<Integer> queue = new LinkedList<>();
for(int i=0;i<a.length;i++){
if(vis[i]==0){
queue.add(i);
while(!queue.isEmpty()){
int cur = queue.poll();
vis[cur]=1;
for(int j=0;j<a[0].length;j++){
if(a[cur][j]==1 && vis[j]==0){
queue.add(j);
}
}
}
cnt++;
}
}
return cnt;
}