参考的代码
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
int n,m,l,t;
int sum=0;
int map[1500][200][100];
int dx[6] = {1,-1,0,0,0,0};
int dy[6] = {0,0,1,-1,0,0};
int dz[6] = {0,0,0,0,1,-1};
struct node
{
int x,y,z;
node(int _x,int _y,int _z):x(_x),y(_y),z(_z){}
};
int InRange(int x,int y,int z)
{
return x<n&&x>=0&&y<m&&y>=0&&z<l&&z>=0;
}
void bfs(int x,int y,int z)
{
int ans=0;
queue <node> que;
que.push(node(x,y,z));
ans++;
map[x][y][z]=0;
while(!que.empty())
{
node tmp=que.front();
que.pop();
for(int i=0;i<6;i++)
{
int fx=tmp.x+dx[i];
int fy=tmp.y+dy[i];
int fz=tmp.z+dz[i];
if(InRange(fx,fy,fz)&&map[fx][fy][fz]==1)
{
map[fx][fy][fz] = 0;
ans++;
que.push(node(fx,fy,fz));
}
}
}
if(ans>=t)
sum+=ans;
}
int main()
{
cin>>n>>m>>l>>t;
for(int k=0;k<l;k++)
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>map[i][j][k];
for(int k=0;k<l;k++)
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(map[i][j][k]==1)
bfs(i,j,k);
cout<<sum<<endl;
return 0;
}