Given a Matrix consisting of 0s and 1s. Find the number of islands of connected 1s present in the matrix. |
Given a Matrix consisting of 0s and 1s. Find the number of islands of connected 1s present in the matrix.
Note: A 1 is said to be connected if it has another 1 around it (either of the 8 directions).
Note: A 1 is said to be connected if it has another 1 around it (either of the 8 directions).
You don't need to read input or print anything. Your task is to complete the function findIslands() which takes the matrix A and its dimensions N and M as inputs and returns the number of islands of connected 1s present in the matrix. A 1 is said to be connected if it has another 1 around it (either of the 8 directions).
Input
2
3 3
1 1 0 0 0 1 1 0 1
4 4
1 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0
Output
2
2
Explanation:
Testcase 1: The graph will look like
1 1 0
0 0 1
1 0 1
Here, two islands will be formed
First island will be formed by elements {A[0][0] , A[0][1], A[1][2], A[2][2]}
Second island will be formed by {A[2][0]}.
Testcase 2: The graph will look like
1 1 0 0
0 0 1 0
0 0 0 1
0 1 0 0
Here, two islands will be formed
First island will be formed by elements {A[0][0] , A[0][1], A[1][2], A[2][3]}
Second island will be formed by {A[3][1]}.
// { Driver Code Starts
#include <bits/stdc++.h>
using namespace std;
int findIslands(vector<int> A[], int N, int M);
int main() {
int T;
cin >> T;
while (T--) {
int N, M;
cin >> N >> M;
vector<int> A[N];
for (int i = 0; i < N; i++) {
vector<int> temp(M);
A[i] = temp;
for (int j = 0; j < M; j++) {
cin >> A[i][j];
}
}
cout << findIslands(A, N, M) << endl;
}
return 0;
}// } Driver Code Ends
/*you are required to complete this method*/
/* Function to find the number of islands in the given graph
* A[]: input array
* N, M: Row and column of a given matrix
*/
void test(vector<int> a[],int i,int j,int n,int m)
{
if(i<0||j<0||i>n||j>m||a[i][j]!=1)
return;
a[i][j]=2;
test(a,i,j+1,n,m);
test(a,i,j-1,n,m);
test(a,i-1,j,n,m);
test(a,i+1,j,n,m);
test(a,i-1,j-1,n,m);
test(a,i+1,j+1,n,m);
test(a,i-1,j+1,n,m);
test(a,i+1,j-1,n,m);
}
int findIslands(vector<int> A[], int N, int M) {
// Your code here
int island=0;
for(int i=0;i<N;++i)
{
for(int j=0;j<M;++j)
{
if(A[i][j]==1)
{
test(A,i,j,N,M);
island++;
}
}
}
return island;
}