Given a Matrix containing 0s and 1s. Find the unit area of the largest region of 1s.
Input:
2
3 3
1 1 0 0 0 1 1 0 1
1 3
1 1 1
Explanation:
Testcase 1: Matrix can be shown as follows:
1 1 0
0 0 1
1 0 1
The largest region of 1s in the above matrix is with a total of 4 1s (colored in Red).
Testcase 2: Matrix can be shown as follows:
1 1 1
The largest region of 1s in the above matrix is with a total of 3 1s (colored in Red).
Given a Matrix containing 0s and 1s. Find the unit area of the largest region of 1s . |
/ { Driver Code Starts#include <bits/stdc++.h >
#include<bits/stdc++.h>
using namespace std;
#define SIZE 100
// } Driver Code Ends
/* Function to find the area of 1s
* SIZE: declared globally for matrix definition
* n, m: row and column of matrix
* A[][]: 2D matrix from input */
void dfs(int i, int j, int & cnt, int n, int m, int a[SIZE][SIZE]) {
if (i < 0 || i >= n || j < 0 || j >= m || a[i][j] == 0)
return;
a[i][j] = 0;
cnt++;
dfs(i + 1, j, cnt, n, m, a);
dfs(i - 1, j, cnt, n, m, a);
dfs(i, j + 1, cnt, n, m, a);
dfs(i, j - 1, cnt, n, m, a);
dfs(i + 1, j + 1, cnt, n, m, a);
dfs(i + 1, j - 1, cnt, n, m, a);
dfs(i - 1, j + 1, cnt, n, m, a);
dfs(i - 1, j - 1, cnt, n, m, a);
}
int findMaxArea(int N, int M, int A[SIZE][SIZE]) {
// Your code here
int p, res = 0;
for (int i = 0; i < N; ++i) {
for (int j = 0; j < M; ++j) {
if (A[i][j] == 1) {
p = 0;
dfs(i, j, p, N, M, A);
res = max(p, res);
}
}
}
return res;
}
// { Driver Code Starts.
int main() {
int t;
cin >> t;
while (t--) {
int n, m;
cin >> n >> m;
int g[SIZE][SIZE];
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
cin >> g[i][j];
cout << findMaxArea(n, m, g) << endl;
}
return 0;
} // } Driver Code Ends