Cod sursa(job #1400802)

Utilizator eu3neuomManghiuc Teodor-Florin eu3neuom Data 25 martie 2015 14:27:36
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <iostream>
#include <fstream>
#include <deque>

using namespace std;

ifstream fin("castel.in");
ofstream fout("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 go[NMax * NMax];
int acces = 1,n,m;

bool good(int x,int y){
    for(int i = 0; i < 4; i++){
        if(v[x + dx[i]][y + dy[i]] == 0){
            return 1;
        }
    }
    return 0;
}

void lee(){
    bool loop = true;
    while(loop == true){
        loop = false;
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                if(v[i][j] > 0 && go[v[i][j]] == true && good(i,j) == 1){
                    v[i][j] = 0;
                    go[(i - 1) * m + j] = true;
                    loop = true;
                    acces++;
                }
            }
        }
    }
}

int main()
{
    int k;
    fin >> n >> m >> k;
    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= m; j++){
            fin >> 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++;
    }
    v[c][r] = 0;
    go[k] = true;
    lee();
    fout << acces;
    return 0;
}