Cod sursa(job #2358053)

Utilizator alex02Grigore Alexandru alex02 Data 27 februarie 2019 21:09:20
Problema Ferma Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <iostream>
#include <cstring>
#include <fstream>

using namespace std;

int n,m, di[4]={-1,0,1,0}, dj[4]={0,1,0,-1}, aux_maxim=0, maxim=0, contor=0;

int matr[405][405][2];

void bordare()
{
    for(int i=0; i<=n+1; i++)
    {
        matr[i][0][0]=-1;
        matr[i][m+1][0]=-1;
    }
     for(int i=0; i<=m+1; i++)
    {
        matr[0][i][0]=-1;
        matr[n+1][i][0]=-1;
    }
}

void alg_fill(int x, int y)
{
    int i_v,j_v;
    matr[i_v][j_v][0]=contor;
    aux_maxim++;
    for(int i=0; i<4; i++)
    {
        i_v=x+di[i];
        j_v=y+dj[i];

        if(matr[i_v][j_v][0]==0 && matr[i_v][j_v][1]==matr[x][y][1])
        {
            alg_fill(i_v,j_v);
        }
    }
}

int main()
{
    ifstream f("ferma3.in");
    ofstream g("ferma3.out");
    int caz;
    f>>caz;
    f>>n>>m;
    bordare();

    for(int i=1; i<=n; i++)
    {

        for(int j=1; j<=m; j++)
        {
            char aux;
            f>>aux;
            matr[i][j][1]=(int)aux;
        }

    }

    if(caz==1)
    {
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m; j++)
            {
                if(matr[i][j][0]==0)
                {
                    aux_maxim=0;
                    alg_fill(i,j);
                    if(aux_maxim>maxim)
                        maxim=aux_maxim;
                    contor++;
                }
            }
        }
        g<<maxim-1<<endl;
    }
    return 0;
}