Pagini recente » Cod sursa (job #2230632) | Cod sursa (job #247622) | Cod sursa (job #1501516) | Cod sursa (job #1101865) | Cod sursa (job #74095)
Cod sursa(job #74095)
#include <stdio.h>
#include <vector.h>
#define MAX 155
int a[MAX][MAX], viz[MAX*MAX], Q[MAX*MAX], rez,n,m,k;
const int dx[] = {-1,+1, 0, 0};
const int dy[] = { 0, 0,-1,+1};
vector<int> key_list[MAX*MAX];
void citire()
{
freopen("castel.in", "r", stdin);
scanf("%d %d %d", &n, &m, &k);
for (int i = 0; i<n; i++)
for (int j=0; j<m; j++)
{
scanf("%d", &a[i][j]);
a[i][j]--;
}
}
void calc()
{
int ql,qr;
ql=qr=0;
Q[ql] = --k;
viz[k] = 1;
for ( ; ql<=qr; ql++)
{
int p = Q[ql]; rez++;
viz[p]=1;
for (vector<int>::iterator it = key_list[p].begin(); it != key_list[p].end(); ++it)
if (!viz[*it])
{
Q[++qr] = *it;
viz[*it]=1;
}
int i = p/m, j = p%m;
for (int k=0; k<4; k++)
{
int ii = i+dx[k], jj= j+dy[k];
if (ii<0 || jj < 0 || ii >= n || jj >= m || viz[ii*m+jj] ) continue;
if ( viz[a[ii][jj]])
{
Q[++qr] = ii*m+jj;
viz[ii*m+jj] = 1;
}
else
key_list[a[ii][jj]].push_back( ii*m+jj);
}
}
}
int main()
{
citire();
calc();
freopen("castel.out", "w", stdout);
printf("%d", rez);
fclose(stdout);
return 0;
}