#include<bits/stdc++.h>
using namespace std;
const int NMAX = 4000;
const int INFINI = 1000000;
char tab[NMAX][NMAX];
int nbAVoir;
int nbL, nbC;
int dir[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cin >> nbL >> nbC;
nbAVoir = 0;
for(int l = 0; l < nbL; l++)
{
for(int c = 0; c < nbC; c++)
{
cin >> tab[l][c];
if(tab[l][c] != '.') nbAVoir++;
}
}
// char dep = tab[0][0];
int nbTypes = 0;
queue<pair<int, int>> casesActu;
casesActu.push({0, 0});
while(casesActu.size())
{
nbTypes ++;
queue<pair<int, int>> proCases;
while(casesActu.size())
{
auto cas = casesActu.front();
casesActu.pop();
if(tab[cas.first][cas.second] == '.') continue;
char couleur = tab[cas.first][cas.second];
tab[cas.first][cas.second] = '.';
for(int iD = 0; iD < 4; iD++)
{
int nouvL = cas.first+dir[iD][0], nouvC = cas.second+dir[iD][1];
if((nouvL < 0) || (nouvC < 0) || (nouvL >= nbL) || (nouvC >= nbC)) continue;
if((tab[nouvL][nouvC] == '.')) continue;
if(tab[nouvL][nouvC] == couleur) casesActu.push({nouvL, nouvC});
else proCases.push({nouvL, nouvC});
}
}
casesActu = proCases;
}
cout << nbTypes;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |