Pagini recente » Cod sursa (job #1226981) | Cod sursa (job #1921190) | Cod sursa (job #1467136) | Cod sursa (job #2246692) | Cod sursa (job #1899149)
#include <fstream>
#include <queue>
using namespace std;
ifstream f ("castel.in");
ofstream g ("castel.out");
queue <int> qy;
queue <int> qx;
int n,m,st,dr,v[151][151],x,y,cx,cy,dx[]={-1,0,1,0},dy[]={0,1,0,-1},cheie[150*150+1],final=1,t;
bool viz[151][151];
struct
{
int a,b,go;
}room[150*150];
bool apartine(int x,int y)
{
return x>=1&&x<=n&&y>=1&&y<=m;
}
int cod(int x,int y)
{
int nr=0;
if(y%m==0) nr=x*m;
else nr=y%m+(x-1)*m;
return nr;
}
void read()
{
f>>n>>m>>st;
cheie[st]=1;
dr=st%m;
viz[st][dr]=1;
if(!dr) {dr=m;--st;}
st=st/n+1;
qx.push(st);
qy.push(dr);
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j) f>>v[i][j];
}
}
void lee()
{
while(!qx.empty())
{
x=qx.front();
y=qy.front();
//g<<x<<' '<<y<<'\n';
qx.pop();
qy.pop();
for(int i=0;i<4;++i)
{
cx=x+dx[i];
cy=y+dy[i];
if(!viz[cx][cy]&&apartine(cx,cy))
{
if(cheie[v[cx][cy]])
{
++final;
qx.push(cx);
qy.push(cy);
viz[cx][cy]=1;
cheie[cod(cx,cy)]=1;
//g<<cod(cx,cy)<<'\n';
for(int j=1;j<=t;++j)
{
if(!viz[room[j].a][room[j].b]&&cheie[room[j].go])
{
++final;
viz[room[j].a][room[j].b]=1;
qx.push(room[j].a);
qy.push(room[j].b);
}
}
}
else
{
++t;
room[t].a=cx;
room[t].b=cy;
room[t].go=v[cx][cy];
}
}
}
}
}
int main()
{
read();
lee();
g<<final;
//g<<cod(2,1);
return 0;
}