Pagini recente » Cod sursa (job #555826) | Cod sursa (job #2333574) | Cod sursa (job #1391681) | Cod sursa (job #76361) | Cod sursa (job #3223190)
#include <fstream>
#include <queue>
using namespace std;
ifstream cin("castel.in");
ofstream cout("castel.out");
int t,a[152][152],ip,jp,sol,n,m,k,dx[]={-1,0,1,0},dy[]={0,1,0,-1};
bool fr[150*150+2],ok;
struct coada{
int l,c;
};
queue<coada>q[2];
bool inside(int l,int c){
return l>0&&l<=n&&c>0&&c<=m;
}
int main()
{
cin>>n>>m>>k;
if(k%m==0)
ip=k/m,jp=m;
else
ip=k/m+1,jp=k%m;
t=1;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
fr[k]=ok=1;
q[t].push({ip,jp});
a[ip][jp]=-1;/// am fost in camera respectiva
sol++;
while(ok){
ok=0;
while(!q[t].empty()){
int l=q[t].front().l,c=q[t].front().c,v=4;
q[t].pop();
for(int i=0;i<4;i++){
int lv=l+dx[i],cv=c+dy[i];
if(inside(lv,cv)){
if(fr[a[lv][cv]]){
if(a[lv][cv]!=-1){
ok=1;
fr[(lv-1)*m+cv]=1;
a[lv][cv]=-1;
q[t].push({lv,cv});
sol++;
}
v--;
}
}else
v--;
}
if(v!=0)
q[1-t].push({l,c});
}
t=1-t;
}
/*for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<'\n';
}*/
cout<<sol;
return 0;
}