Pagini recente » Cod sursa (job #548967) | Cod sursa (job #2024462) | Cod sursa (job #937557) | Cod sursa (job #433054) | Cod sursa (job #932225)
Cod sursa(job #932225)
#include<fstream>
#include<queue>
#include<utility>
#include<bitset>
#define NMAX 155
using namespace std;
ifstream fin("castel.in");
ofstream fout("castel.out");
vector <int> vec;
int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
int a[NMAX][NMAX];
int n,m,k;
bool used[NMAX*NMAX];
void Citire( void ){
fin>>m>>n>>k;
vec.push_back(k);
for(int i=1; i <= m ; ++i )
for(int j=1; j <= n ; ++j )
fin>>a[i][j];
}
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 Rezolvare( 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;
fout<<sol;
}
int main( void )
{
Citire();
Rezolvare();
write();
return 0;
}