Pagini recente » Cod sursa (job #2972994) | Cod sursa (job #2204324) | Cod sursa (job #2571239) | Cod sursa (job #2744537) | Cod sursa (job #2345857)
#include <fstream>
#include <deque>
using namespace std;
int a[151][151];
bool viz[151][151];
bool valabil[22501];
int dx[]={0,1,0,-1,0},dy[]={0,0,1,0,-1};
int n,m,x,lin,col,sol;
ifstream fin("castel.in");
ofstream fout("castel.out");
struct que
{
int l,c;
};
deque <que> q;
int camera(int l,int c)
{
return m*(l-1)+c;
}
int verif(int x, int y)
{
return x>0&&y>0&&x<=n&&y<=m&&viz[x][y]==0;
}
void coada(int ls,int cs)
{
viz[ls][cs]=1;
q.push_back({ls,cs});
while(!q.empty())
{
int l=q.front().l;
int c=q.front().c;
for(int i=0;i<=4;i++)
{
int ln=l+dx[i];
int cn=c+dy[i];
if(valabil[a[ln][cn]]&&verif(ln,cn))
{
q.push_front({ln,cn});
valabil[camera(ln,cn)]=1;
viz[ln][cn]=1;
}
else if(verif(ln,cn))
q.push_back({ln,cn});
}
q.pop_front();
}
}
int main()
{
fin>>n>>m>>x;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
fin>>a[i][j];
col=x%m;
if(col==0)
col=m;
lin=1+(x-col)%m;
valabil[x]=1;
coada(lin,col);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
sol+=viz[i][j];
fout<<sol;
return 0;
}