Cod sursa(job #2144328)

Utilizator raddudjPogonariu Radu raddudj Data 26 februarie 2018 18:04:05
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;

vector < pair<int, int> > v;

int dx[] = {0, 1, 0, -1};
int dy[] = {-1, 0, 1, 0};
int mat[155][155];
bool key[23000];

int main() {
	freopen("castel.in", "r", stdin);
	freopen("castel.out", "w", stdout);
	int N, M, start;

	scanf("%d%d%d", &N, &M, &start);
	for(int i = 1; i <= N; i++)
		for(int j = 1; j <= M; j++)
			scanf("%d", &mat[i][j]);
	auto startp = make_pair(start / M + 1, start % M == 0 ? M : start % M);
	int count = 1, done = 0;
	v.push_back(startp);
	mat[startp.first][startp.second] = 0;
	key[start] = 1;
	while(!done) {
		done = 1;
		for(auto poz: v)
			for(int i = 0; i < 4; i++)
				if(mat[poz.first + dx[i]][poz.second + dy[i]] && key[mat[poz.first + dx[i]][poz.second + dy[i]]]) {
					count++;
					int nr = (poz.first + dx[i] - 1) * M + poz.second + dy[i];
					key[nr] = 1;
					mat[poz.first + dx[i]][poz.second + dy[i]] = 0;
					v.push_back(make_pair(poz.first + dx[i], poz.second + dy[i]));
					done = 0;
				}
	}
	printf("%d\n", count);
}