Pagini recente » Cod sursa (job #2433616) | Cod sursa (job #2511555) | Cod sursa (job #2633164) | Cod sursa (job #1100702) | Cod sursa (job #1289955)
#include <fstream>
#include <string>
#include <algorithm>
using namespace std;
ifstream in("ferma.in");
ofstream out("ferma.out");
const int NMAX = 400;
int dx[]={-1,0,1,0},dy[]={0,1,0,-1}, v[NMAX+3][NMAX+3], ar[NMAX+3][NMAX+3];
int N,M,cerinta, Ar= 0, Rasp1= 0, Rasp2= 0;
string s;
bool OK_1( int x, int y, int nx, int ny ) {
return ( v[x][y] == v[nx][ny] );
}
bool OK_2( int x, int y ) {
return (ar[x][y] == -1);
}
void FLOOD_smenos( int x, int y ) {
ar[x][y] = Ar;
for( int i= 0; i<4; ++i ) {
int nx= x+dx[i], ny= y+dy[i];
if( OK_2( nx,ny ) ) FLOOD_smenos( nx,ny );
}
}
void FLOOD( int x, int y ) {
ar[x][y] = -1;
++Ar;
for( int i= 0; i<4; ++i ) {
int nx= x+dx[i], ny= y+dy[i];
if( OK_1(nx,ny) ) FLOOD( x,y, nx, ny );
}
}
void citire_flood() {
in >> cerinta >> N >> M;
for( int i= 1; i<=N; ++i ) {
in >> s;
for( int j= 1; j<=M; ++j ) v[i][j] = s[j-1];
}
for( int i= 1; i<=N; ++i ) {
for( int j= 1; j<=M; ++j ) {
if( !ar[i][j] ) {
Ar= 0;
FLOOD( i,j );
FLOOD_smenos( i,j );
Rasp1= max(Rasp1, Ar);
}
}
}
int main() {
Citire_flood();
for( int i= 1; i<=N; ++i ) {
for( int j= 1; j<=M; ++j ) {
int value;
for( int i= 0; i<4; ++i ) {
int nx= x+dx[i], y= y+dy[i];
if( v[nx][ny] != 0 ) Rasp2= max( Rasp2, Consider( i,j,v[nx][ny] ) );