Cod sursa(job #1635875)

Utilizator vlad6001Pintilie Vlad vlad6001 Data 6 martie 2016 20:38:49
Problema Castel Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.58 kb
#include <fstream>
using namespace std;

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

int matrice[160][160], coada[25000], linii, coloane, inceput, i, j, in, copie, sf, linie, coloana, x, iul, jul, val, cheie[23000], z, cate[23000], tine[23000][20];
int i_afis, j_afis, lin, col;
int dir_i[] = {0, -1, 0, 1, 0};
int dir_j[] = {0, 0, 1, 0, -1};

int main()
{
    fin >> linii >> coloane >> inceput;
    cheie[inceput] = 1;
    for(i=1; i <= linii; i++)
    {
        for(j=1; j <= coloane; j++)
        fin >> matrice[i][j];
    }

    for(x=0; x <= linii+1; x++)
    {
        matrice[x][coloane+1] = -1;
        matrice[x][0] = -1;
    }
    for(x=0; x <= coloane+1; x++)
    {
        matrice[0][x] = -1;
        matrice[linii+1][x] = -1;
    }

    coada[1] = inceput;
    in = 1;
    sf = 1;

    while(in <= sf)
    {
        i = coada[in]/coloane+1;
        j = coada[in]%coloane;
        if(j == 0)
        {
            i--;
            j = coloane;
        }
        matrice[i][j] = -1;

        for(x=1; x <= 4; x++)
        {
            iul = i + dir_i[x];
            jul = j + dir_j[x];

            if(matrice[iul][jul] != -1)
            {
                val = matrice[iul][jul];
                if(cheie[val] == 1)
                {
                    sf++;
                    coada[sf] = (iul-1)*coloane + jul;
                    copie = coada[sf];
                    for(z=1; z <= cate[copie]; z++)
                    {
                        lin = tine[copie][z]/coloane+1;
                        col = tine[copie][z]%coloane;
                        if(lin == 0)
                        {
                            lin--;
                            col = coloane;
                        }

                        if(matrice[lin][col] != -1)
                        {
                            sf++;
                            coada[sf] = tine[copie][z];
                            matrice[lin][col] = -1;
                        }
                    }
                    cheie[coada[sf]] = 1;
                }
                else
                {
                    cate[val]++;
                    tine[val][cate[val]] = (iul-1)*coloane + jul;
                }
            }
        }

        in++;
    }

    /*for(i=1; i <= sf; i++)
    {
        i_afis = coada[i]/coloane+1;
        j_afis = coada[i]%coloane;
        if(j_afis == 0)
        {
            i_afis--;
            j_afis = coloane;
        }
        fout << i_afis << ' ' << j_afis << '\n';
    }*/
    fout << sf;
}