Pagini recente » Cod sursa (job #638526) | Cod sursa (job #1949331) | Profil Asgari_Armin | Cod sursa (job #857064) | Cod sursa (job #2270864)
#include <cstdio>
#include <vector>
using namespace std;
int a[155][155], n, m, k;
vector <int> need_keys[22500];
int am[22500];
int di[] = {-1, 0, 1, 0}, dj[] = {0, 1, 0, -1};
int nrcam;
void prin_castel(int MaAflu)
{
if(am[MaAflu])
{
return;
}
nrcam++;
am[MaAflu] = 1;
int i = (MaAflu-1)/m+1, j = (MaAflu-1)%m + 1;
for(int v = 0; v<4; v++)
{
int iv = i + di[v];
int jv = j + dj[v];
if(am[a[iv][jv]] != 0 && a[iv][jv] != -1)
prin_castel((iv-1)*m+jv);
}
for(int AmCheia = 0; AmCheia<need_keys[MaAflu].size(); AmCheia++)
{
int ii = (need_keys[MaAflu][AmCheia]-1)/m+1;
int ji = (need_keys[MaAflu][AmCheia]-1)%m+1;
for(int v = 0; v<4; v++)
{
int iv = ii+di[v];
int jv = ji+dj[v];
if(a[iv][jv]!=-1 && am[a[iv][jv]] != 0)
prin_castel(need_keys[MaAflu][AmCheia]);
}
}
}
void bord()
{
for(int i=0; i<=n+1; i++)
{
a[i][0] = -1;
a[i][m+1] = -1;
}
for(int j=0; j<=m+1; j++)
{
a[0][j] = -1;
a[n+1][j] = -1;
}
}
int main()
{
freopen("castel.in", "r", stdin);
freopen("castel.out", "w", stdout);
scanf("%d %d %d\n", &n, &m, &k);
int c = 1;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
{
scanf("%d", &a[i][j]);
need_keys[a[i][j]].push_back(c);
c++;
}
bord();
prin_castel(k);
printf("%d", nrcam);
return 0;
}