Cod sursa(job #2199719)

Utilizator unknownpersonBidasca Carina Georgiana unknownperson Data 28 aprilie 2018 20:21:22
Problema Componente tare conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("ferma3.in");
ofstream g("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;

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

        for(int j = 1; j <= M; j++)
        {
            char c;
            f >> 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)
        g << maxim << "\n";
}