Pagini recente » Cod sursa (job #1076325) | Cod sursa (job #27423) | Cod sursa (job #1942138) | Cod sursa (job #2537159) | Cod sursa (job #2144334)
#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, k;
scanf("%d%d%d", &N, &M, &k);
for(int i = 1; i <= N; i++)
for(int j = 1; j <= M; j++)
scanf("%d", &mat[i][j]);
int r = k % M, c = k / M;
if(r == 0)
r = M;
else
c++;
auto startp = make_pair(c, r);
int count = 1, done = 0;
v.push_back(startp);
mat[startp.first][startp.second] = 0;
key[k] = 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);
}