Pagini recente » Cod sursa (job #1114812) | Cod sursa (job #1060520) | Cod sursa (job #2301086) | Monitorul de evaluare | Cod sursa (job #2144331)
#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(int k = 0; k < v.size(); k++)
for(int i = 0; i < 4; i++)
if(mat[v[k].first + dx[i]][v[k].second + dy[i]] && key[mat[v[k].first + dx[i]][v[k].second + dy[i]]]) {
count++;
int nr = (v[k].first + dx[i] - 1) * M + v[k].second + dy[i];
key[nr] = 1;
mat[v[k].first + dx[i]][v[k].second + dy[i]] = 0;
v.push_back(make_pair(v[k].first + dx[i], v[k].second + dy[i]));
done = 0;
}
}
printf("%d\n", count);
}