Cod sursa(job #2268908)

Utilizator razvanradulescuRadulescu Razvan razvanradulescu Data 25 octombrie 2018 15:12:25
Problema Castel Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.57 kb
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");

const short vi[5] = {-1, 0, 1, 0}, vj[5] = {0, 1, 0, -1};
int a[155][155], chei[22505];
int n, m, k;
int nrCamere = 0;
vector <int> c[22505];

void castel(int camCurr)
{
    if(chei[camCurr])
        return;
        nrCamere++;
    chei[camCurr] = 1;
    int i = (camCurr-1)/m+1;
    int j = (camCurr-1)%m+1;
    for(int v = 0; v<4; v++)
    {
        int iv = i+vi[v];
        int jv = j+vj[v];
        if(a[iv][jv]!=-1 && chei[a[iv][jv]])
            castel((iv-1)*m+jv);
    }
    for(int camLaCareAmCheie = 0; camLaCareAmCheie<c[camCurr].size(); camLaCareAmCheie++)
    {
        int i = (c[camCurr][camLaCareAmCheie]-1)/m+1;
        int j = (c[camCurr][camLaCareAmCheie]-1)%m+1;
        for(int v = 0; v<4; v++)
        {
            int iv = i+vi[v];
            int jv = j+vj[v];
            if(a[iv][jv]!=-1 && chei[a[iv][jv]])
                castel(c[camCurr][camLaCareAmCheie]);
        }
    }
}

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

int main()
{
    f>>n>>m>>k;
    int camera = 1;
    for(int i = 1; i<=n; i++)
    {
        for(int j = 1; j<=m; j++)
        {
            f>>a[i][j];
            c[a[i][j]].push_back(camera);
            camera++;
        }
    }
    bordare();
    castel(k);
    g<<nrCamere;
    return 0;
}