Alina este pasionată de fotografiile alb-negru. Ea ales o imagine pe care a codificat-o binar într-o matrice de dimensiune n x m cu valori 0 corespunzătoare pentru alb (pe care le-a numit puncte luminoase) și cu valori 1 corespunzătoare pentru negru (pe care le-a numit puncte întunecate). Astfel, ea identifică în imaginea codificată zone luminoase și zone întunecate, o zonă fiind o porțiune a matricei care conține elemente cu aceeași valoare, trecerea de la un element la altul al zonei făcându-se doar prin deplasări pe orizontală sau pe verticală.
Cerința
Ajutați-o pe Alina să găsească cea mai luminoasă zonă și determinați numărul de puncte luminoase ale acesteia.
Date de intrare
Pe prima linie a fișierului text foto.in se găsesc două numere naturale n și m care reprezintă numărul liniilor, respectiv numărul coloanelor matricei. Pe următoarele n linii se găsesc câte m valori binare, separate prin câte un spațiu, reprezentând elementele matricei care codifică imaginea.
Date de ieșire
Fișierul de ieșire foto.out trebuie să conțină o singură linie pe care se va afla numărul punctelor din cea mai luminoasă zonă a imaginii.
Restricții și precizări
1 ≤ n ≤ 100,1 ≤ m ≤ 100, numere naturale- dacă nu există nicio zonă luminoasă, se va considera că cea mai luminoasă zonă are
0elemente
Exemplu
foto.in
6 6 1 0 0 1 1 1 1 1 0 1 0 1 1 0 0 1 0 0 1 1 1 0 1 1 1 0 0 1 1 0 1 0 0 1 1 1
foto.out
5
Explicație
Zona cea mai luminoasă este formată din elementele: (1,2), (1,3), (2,3), (3,2), (3,3).
#include <bits/stdc++.h>
using namespace std;
ifstream cin("foto.in");
ofstream cout("foto.out");
int n, m, a[101][101], cnt;
int di[]={0,0,-1,1};
int dj[]={-1,1,0,0};
bool inmat(int i, int j){
return i >= 1 && i <= n && j >= 1 && j <= m;
}
void fill(int i, int j){
cnt++;
a[i][j] = 1;
for(int d = 0; d <= 3; ++d){
int ii = i + di[d];
int jj = j + dj[d];
if(inmat(ii, jj) && a[ii][jj] == 0)
fill(ii, jj);
}
}
int main(){
int max = 0;
cin >> n >> m;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
cin >> a[i][j];
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
if(a[i][j] == 0){
cnt=0;
fill(i, j);
if(cnt > max)
max = cnt;
}
cout << max;
return 0;
}