Pagini recente » Cod sursa (job #1357648) | Cod sursa (job #1945638) | test12242435 | Cod sursa (job #1699123) | Cod sursa (job #930833)
Cod sursa(job #930833)
#include<fstream>
#include<queue>
#include<utility>
#include<bitset>
#define NMAX 155
/*
FILE *f=fopen("castel.in","r");
FILE *g=fopen("castel.out","w");
*/
using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
vector <int> vec;
int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
int a[NMAX][NMAX];
int n,m,k;
//bitset<NMAX*NMAX> used;
bool used[NMAX*NMAX];
void read( void )
{
f>>m>>n>>k;
vec.push_back(k);
for(int i(1); i <= m ; ++i )
for(int ii(1); ii <= n ; ++ii )
f>>a[i][ii];
f.close();
}
int coord_x( int numb )
{
return (numb-1)/n+1;
}
int coord_y( int numb )
{
return (numb-1)%n+1;
}
bool ok (int i,int j )
{
if(i<1 || i>m || j<1 || j>n)
return 0;
return 1;
}
int room(int i, int j )
{
return (i-1)*n+j;
}
void solve( void )
{
int ii(0),size(1);
used[k]=true;
bool oki=true;
while( oki == true )
{
oki=false;
ii=0;
while(ii < size )
{
int x=coord_x(vec[ii]);
int y=coord_y(vec[ii]);
++ii;
for(int i(0); i < 4 ; ++i )
{
int newx=x+dx[i];
int newy=y+dy[i];
if( ok(newx,newy) )
{
if( used[a[newx][newy]] && !used[room(newx,newy)])
{
used[room(newx,newy)]=true;
vec.push_back(room(newx,newy));
oki=true;
++size;
}
}
}
}
}
}
void write( void )
{
int sol=0;
for(int i(1) ; i<= n*m; ++i)
if(used[i])
++sol;
g<<sol;
g.close();
}
int main( void )
{
read();
solve();
write();
return 0;
}