Pagini recente » Cod sursa (job #2220422) | Cod sursa (job #1055642) | Cod sursa (job #1891028) | Cod sursa (job #1268340) | Cod sursa (job #1268152)
#include<stdio.h>
#include<queue>
#include<vector>
using namespace std;
#define ITERATOR vector<int>::iterator
const int NMAX = 155;
queue <int> q;
int n, m, grid[NMAX][NMAX], di[] = {-1, 0, 1, 0}, dj[] = {0, 1, 0, -1};
bool vis[NMAX * NMAX];
void decode (int x, int &i, int &j) {
i = x / m;
j = x % m;
if(j == 0)
j = m;
else
++ i;
}
int code (int i, int j) {
return (i - 1) * m + j;
}
bool inBound (int i, int j) {
return i >= 1 && j >= 1 && i <= n && j <= m;
}
int main() {
freopen("castel.in", "r", stdin);
freopen("castel.out", "w", stdout);
int i, j, room, cnt, k, newi, newj, change;
scanf("%d%d%d", &n, &m, &room);
for(i = 1; i <= n; ++ i)
for(j = 1; j <= m; ++ j)
scanf("%d", &grid[i][j]);
vis[room] = 1;
change = 1;
while(change) {
change = 0;
for(i = 1; i <= n; ++ i)
for(j = 1; j <= m; ++ j)
if(vis[code(i, j)]) {
for(k = 0; k < 4; ++ k) {
newi = i + di[k];
newj = j + dj[k];
if(inBound(newi, newj) && !vis[code(newi, newj)] && vis[grid[newi][newj]])
change = 1,
vis[code(newi, newj)] = 1;
}
}
}
cnt = 0;
for(i = 1; i <= n * m; ++ i)
if(vis[i])
++ cnt;
printf("%d\n", cnt);
return 0;
}