Pagini recente » Cod sursa (job #1330813) | Cod sursa (job #1669478) | Cod sursa (job #1197156) | Cod sursa (job #970101) | Cod sursa (job #1384362)
#include <cstdio>
#include <vector>
#define NMAX 157
FILE *fin, *fout;
using namespace std;
int m, n, k, arr[NMAX][NMAX], x, y, poz, temp, size, countn = 0;
bool check[NMAX][NMAX], check1[NMAX][NMAX];
vector<int> vx[NMAX*NMAX], vy[NMAX*NMAX];
struct queue
{
int x1;
int y1;
} q[NMAX*NMAX];
int main()
{
fin = freopen("castel.in", "r", stdin);
fout = freopen("castel.out", "w", stdout);
scanf("%d%d%d", &m, &n, &k);
for(int i = 1; i<= m; i++)
{
for(int j = 1; j<= n; j++)
{
scanf("%d", &arr[i][j]);
vx[arr[i][j]].push_back(i);
vy[arr[i][j]].push_back(j);
}
}
x = (k-1)%n + 1;
y = (k-1)/n + 1;
check[x][y] = 1;
check1[x][y] = 1;
q[0].x1 = x;
q[0].y1 = y;
poz = 1;
for(int i = 0; i< poz; i++)
{
temp = (q[i].x1-1)*n + q[i].y1;
size = vx[temp].size();
for(int j = 0; j< size; j++)
{
check[vx[temp][j]][vy[temp][j]] = 1;
}
if(check1[q[i].x1+1][q[i].y1] == 0 && check[q[i].x1+1][q[i].y1] == 1)
{
q[poz].x1 = q[i].x1 + 1;
q[poz].y1 = q[i].y1;
check1[q[poz].x1][q[poz].y1] = 1;
poz++;
}
if(check1[q[i].x1-1][q[i].y1] == 0 && check[q[i].x1-1][q[i].y1] == 1)
{
q[poz].x1 = q[i].x1 - 1;
q[poz].y1 = q[i].y1;
check1[q[poz].x1][q[poz].y1] = 1;
poz++;
}
if(check1[q[i].x1][q[i].y1+1] == 0 && check[q[i].x1][q[i].y1+1] == 1)
{
q[poz].x1 = q[i].x1;
q[poz].y1 = q[i].y1 + 1;
check1[q[poz].x1][q[poz].y1] = 1;
poz++;
}
if(check1[q[i].x1][q[i].y1-1] == 0 && check[q[i].x1][q[i].y1-1] == 1)
{
q[poz].x1 = q[i].x1;
q[poz].y1 = q[i].y1 - 1;
check1[q[poz].x1][q[poz].y1] = 1;
poz++;
}
}
for(int i = 1; i<= m; i++)
{
for(int j = 1; j<= n; j++)
{
countn+=check1[i][j];
}
}
printf("%d\n", countn);
fclose(fin);
fclose(fout);
return 0;
}