Note
Code
#include<bits/stdc++.h>
using namespace std;
int m,n,l,t;
bool inq[1300][130][65]={false};
int loc[1300][130][65];
int xl[6]={-1,0,1,0,0,0};
int yl[6]={0,1,0,-1,0,0};
int zl[6]={0,0,0,0,-1,1};
struct Node{
int x,y,z;
}nod;
bool test(int x,int y,int z){
if(x<0||x>m||y<0||y>n||z<0||z>l) return false;
if(loc[x][y][z]==0||inq[x][y][z]==true) return false;
return true;
}
int bfs(int x,int y,int z){
int count=0;
queue<Node> q;
nod.x=x,nod.y=y,nod.z=z;
q.push(nod);
inq[x][y][z]=true;
while(!q.empty()){
count++;
Node top=q.front();
q.pop();
for(int i=0;i<6;i++){
int xx=top.x+xl[i];
int yy=top.y+yl[i];
int zz=top.z+zl[i];
if(test(xx,yy,zz)){
nod.x=xx,nod.y=yy,nod.z=zz;
q.push(nod);
inq[xx][yy][zz]=true;
}
}
}
if(count<t) return 0;
else return count;
}
int main(){
#ifndef ONLINE_JUDGE
freopen("data.txt","r",stdin);
#endif
cin>>m>>n>>l>>t;
int ans=0;
for(int i=0;i<l;i++)
for(int j=0;j<m;j++)
for(int k=0;k<n;k++)
scanf("%d",&loc[j][k][i]);
for(int i=0;i<l;i++)
for(int j=0;j<m;j++)
for(int k=0;k<n;k++)
if(inq[j][k][i]==false&&loc[j][k][i]==1)
ans+=bfs(j,k,i);
cout<<ans;
return 0;
}