Pagini recente » Cod sursa (job #1383994) | Cod sursa (job #2528222) | Cod sursa (job #1733034) | Cod sursa (job #1483383) | Cod sursa (job #574938)
Cod sursa(job #574938)
#include<stdio.h>
#include<vector>
using namespace std;
#define Dim 155
FILE*f=fopen("castel.in","r");
FILE*g=fopen("castel.out","w");
int n,m,k,i,j,Nec[Dim*Dim],C[Dim*Dim];
char Viz[Dim*Dim],Used[Dim*Dim];
int p,u,x,c,r;
vector<int>F[Dim*Dim];
int main () {
fscanf(f,"%d %d %d",&n,&m,&k);
for ( i = 1 ; i <= n ; ++i ){
for ( j = 1 ; j <= m ; ++j ){
fscanf(f,"%d",&x);
Nec[(i-1)*m+j] = x;
}
}
for ( p = u = 1, C[1] = k , Viz[k] = 1 ; p <= u ; ++p ){
c = C[p];
for ( i = 0 ; i < F[c].size() ; ++i ){
r = F[c][i];
if ( !Viz[r] ){
Viz[r] = 1;
C[++u] = r;
}
}
if ( c > m ){
if ( !Viz[c-m] ){
if ( Viz[Nec[c-m]] ){
C[++u] = c-m;
Viz[c-m] = 1;
}
else
F[Nec[c-m]].push_back(c-m);
}
}
if ( ( c - 1 ) % m ){
if ( !Viz[c-1] ){
if ( Viz[Nec[c-1]] ){
C[++u] = c-1;
Viz[c-1] = 1;
}
else
F[Nec[c-1]].push_back(c-1);
}
}
if ( c % m ){
if ( !Viz[c+1] ){
if ( Viz[Nec[c+1]] ){
C[++u] = c + 1;
Viz[c+1] = 1;
}
else
F[Nec[c+1]].push_back(c+1);
}
}
if ( c <= ( n - 1 ) * m ){
if ( !Viz[c+m] ){
if ( Viz[Nec[c+m]] ){
C[++u] = c + m;
Viz[c+m] = 1;
}
else
F[Nec[c+m]].push_back(c+m);
}
}
}
fprintf(g,"%d\n",u);
fclose(f);
fclose(g);
return 0;
}