Cod sursa(job #2564952)

Utilizator TheKernelTiberiu Ioan TheKernel Data 2 martie 2020 11:16:13
Problema Ferma Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <iostream>
#include <fstream>

using namespace std;

#include <algorithm>
#include <fstream>
#include <iostream>

using namespace std;

ifstream fin("ferma3.in");
ofstream fout("ferma3.out");

const int NMAX =  405;

int N, M, V, numarul_zonei;
int matrice[NMAX][NMAX];
int matriceFill[NMAX][NMAX];
int di[4] = {-1, 0, 1, 0};
int dj[4] = {0, 1, 0, -1};
int d[NMAX*NMAX];

bool OK(int i, int j)
{
    if(i < 1 || j < 1 || i > N || j > M)
        return false;
    if(matriceFill[i][j] != 0)
        return false;
    return true;
}

void algFill(int x, int y)
{
    matriceFill[x][y] = numarul_zonei;
    d[numarul_zonei]++;
    for(int i = 0; i < 4; i++)
    {
        int noul_i = x + di[i];
        int noul_j = y + dj[i];
        if(OK(noul_i, noul_j) && matrice[x][y] == matrice[noul_i][noul_j])
            algFill(noul_i, noul_j);
    }
}

int main()
{
    int maxim = 0;

    fin >> V >> N >> M;
    for(int i = 1; i <= N; i++)
    {

        for(int j = 1; j <= M; j++)
        {
            char c;
            fin >> c;
            matrice[i][j] = (int) c;
        }
    }
    for(int i = 1; i <= N; i++)
    {
        for(int j = 1; j <= M; j++)
        {
            if(!matriceFill[i][j])
            {
                numarul_zonei++;
                algFill(i, j);
                if(maxim < d[numarul_zonei])
                    maxim = d[numarul_zonei];
            }
        }
    }

    if(V == 1)
        fout << maxim << "\n";
}