Cod sursa(job #1336051)

Utilizator GabiSStoica Gabriel GabiS Data 6 februarie 2015 14:44:55
Problema Ferma Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("ferma.in");
ofstream g("ferma.out");

int op,m,n,z[410][410],cult[260];
char v[410][410];

bool OK(int x, int y){
if(x < 1 || y < 1 || x > m || y > n)
    return false;
if(z[x][y]!=0)
    return false;
return true;
}

void Fill(int x, int y,char a,int k){
if(OK(x+1,y) && v[x+1][y]==a){
z[x+1][y]=k;
    Fill(x+1,y,a,k);}
if(OK(x,y+1) && v[x][y+1]==a){
    z[x][y+1]=k;
    Fill(x,y+1,a,k);
}
if(OK(x-1,y) && v[x-1][y]==a){
    z[x-1][y]=k;
    Fill(x-1,y,a,k);
}
if(OK(x,y-1) && v[x][y-1]==a){
    z[x][y-1]=k;
    Fill(x,y-1,a,k);
}
}

int main(){

f>>op;
f>>m>>n;
int i=1,j=1;


while( !f.eof() ){
f>>v[i][j];j++;
if(j==n+1){j=1;i++;}

}
int k=0;char lit;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
if(z[i][j]==0){
lit=v[i][j];

k++;z[i][j]=k;
Fill(i,j,lit,k);
}
}}
int max=1,max2=1;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){
cult[z[i][j]]++;

if(z[i][j]>max) max=z[i][j];

}}
for(i=1;i<=max;i++)
if(cult[i]>max2) max2=cult[i];
g<<max2;

return 0;}