Cod sursa(job #2135350)

Utilizator Anastasia11Susciuc Anastasia Anastasia11 Data 18 februarie 2018 19:27:38
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.55 kb
#include <fstream>
#include <deque>

using namespace std;

ifstream f("castel.in");
ofstream g("castel.out");

const int NMax = 155;
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
int v[NMax][NMax];
bool fr[NMax * NMax];
int cnt = 1,n,m,k;
deque < int > qx,qy;

int main()
{

    f >> n >> m >> k;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            f >> v[i][j];
        }
    }
    for(int i = 0; i <= n + 1; i++){
        v[i][0] = v[i][m + 1] = -1;
    }
    for(int i = 0; i <= m + 1; i++){
        v[0][i] = v[n + 1][i] = -1;
    }
    int r = k % m;
    int c = k / m;

    if(r == 0)
        r = m;
     else
        c++;

    qx.push_back(c);
    qy.push_back(r);

    v[c][r] = -1;
    fr[k] = true;
      k = 0;
    bool cauta = true;

    while(cauta == true)
    {
        cauta = false;
        for(int i = 0; i <= k; i++)
        {
            for(int j = 0; j < 4; j++)
            {
                int x = qx[i] + dx[j];
                int y = qy[i] + dy[j];
                if(v[x][y] != -1)
                {
                    if(fr[v[x][y]] == true)
                    {
                        k++;
                        qx.push_back(x);
                        qy.push_back(y);
                        cnt++;
                        v[x][y] = -1;
                        fr[(x - 1) * m + y] = true;
                        cauta = true;
                    }
                }
            }
        }
    }
    g << cnt;
    return 0;
}