Pagini recente » Cod sursa (job #661852) | Cod sursa (job #1808930) | Cod sursa (job #520618) | Cod sursa (job #987176) | Cod sursa (job #930146)
Cod sursa(job #930146)
#include<fstream>
#include<vector>
#define NMax 155
using namespace std;
int viz[NMax*NMax];
int m,n,ch[NMax][NMax];
int px[]={0,0,1,-1}, py[]={1,-1,0,0};
vector<int> acc;
ifstream f("castel.in");
ofstream g("castel.out");
int coord_x (int nr)
{
return (nr-1)/n+1;
}
int coord_y (int nr)
{
return (nr-1)%n+1;
}
int numar (int x, int y)
{
return (x-1)*n+y;
}
int check (int x, int y)
{
if (x<1 || x>m)
return 0;
if (y<1 || y>n)
return 0;
return 1;
}
int main ()
{
int k,i,j,cx,cy,x,y;
int size=1,ok,cont=0,dir;
f>>m>>n>>k;
acc.push_back(k);
viz[k]=1;
for (i=1; i<=m; i++)
for (j=1; j<=n; j++)
f>>ch[i][j];
ok=1;
while (ok)
{
ok=0;
for (i=0; i<size; i++)
{
cx=coord_x(acc[i]);
cy=coord_y(acc[i]);
for (dir=0; dir<4; dir++)
if (check(cx+px[dir],cy+py[dir]))
{
x=cx+px[dir], y=cy+py[dir];
if (!viz[numar(x,y)] && viz[ch[x][y]])
viz[numar(x,y)]=1, ok=1, acc.push_back(numar(x,y)), size++;
}
}
}
for (i=1; i<=m*n; i++)
if (viz[i])
cont++;
g<<cont<<"\n";
return 0;
}