题目描述:
在一个机房中,服务器的位置标识在 n*m 的整数矩阵网格中,1 表示单元格上有服务器,0 表示没有。如果两台服务器位于同一行或者同一列中紧邻的位置,则认为它们之间可以组成一个局域网。
请你统计机房中最大的局域网包含的服务器个数。
输入描述:
第一行输入两个正整数,n和m,0<n,m<=100
之后为n*m的二维数组,代表服务器信息
输出描述:
最大局域网包含的服务器个数。
示例1
输入:
2 2 1 0 1 1
输出:
3
说明:
[0][0]、[1][0]、[1][1]三台服务器相互连接,可以组成局域网
代码
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int[][] arr = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = in.nextInt();
}
}
boolean[][] visited = new boolean[n][m];
int max = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
s=0;
f(i,j,arr,visited);
max=Math.max(max,s);
}
}
System.out.println(max);
}
public static int s=0;
public static void f(int i, int j, int[][] arr, boolean[][] visited){
if(i<0 || i>=arr.length || j<0 || j>=arr[0].length || visited[i][j]==true || arr[i][j]==0){
return;
}
visited[i][j]=true;
s++;
f(i+1, j, arr, visited);
f(i, j+1, arr, visited);
}
}