public class 连通性检测 {
public static void main(String[] args) {
int[][] arr = {{0, 1, 0}, {1, 0, 1}, {0, 1, 0}};
int cut = 0;
for (int[] ints : arr) {
System.out.println(Arrays.toString(ints));
}
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if(arr[i][j]==1){
dfs(arr,i,j);
cut++;
}
}
}
System.out.println(cut==1);
}
private static void dfs(int[][] arr, int i, int j) {
arr[i][j] = 0;
if(i-1>=0&&arr[i-1][j]==1)dfs(arr,i-1,j);
if(j-1>=0&&arr[i][j-1]==1)dfs(arr,i,j-1);
if(i+1<arr.length&&arr[i+1][j]==1)dfs(arr,i+1,j);
if(j+1<arr[0].length&&arr[i][j+1]==1)dfs(arr,i,j+1);
}
}
思想:
先遍历找到第一个1作为入口,
然后用dfs向四周发散,寻找为一的格子,并将走过的格子变为零,
如果dfs的入口只有一个,就为联通。