C++ 代码
#include<iostream>
#include<string.h>
#include<queue>
using namespace std;
bool map[65][1290][130];
bool vis[65][1290][130];
int dx[] = {-1,1,0,0,0,0}, dy[] = {0,0,-1,1,0,0}, dz[] = {0,0,0,0,-1,1};
int m,n,l,t;
struct point{
int x,y,z;
point(int _x, int _y, int _z):x(_x),y(_y),z(_z){}
};
int bfs(int x, int y ,int z)
{
int a,b,c,res = 1;
queue<point> Q;
Q.push(point(x,y,z));
vis[x][y][z] = 1;
while(Q.size()){
point top = Q.front();
Q.pop();
for(int i = 0; i<6; i++){
a = top.x + dx[i], b = top.y + dy[i], c = top.z + dz[i];
if(a<0 || a>=l || b<0 || b>=m || c<0 || c>=n || vis[a][b][c] || !map[a][b][c]) continue;
vis[a][b][c] = 1;
res++;
Q.push(point(a,b,c));
}
}
return res;
}
int main()
{
int res, ans = 0;
cin>>m>>n>>l>>t;
for(int i = 0; i<l; i++){
for(int j = 0; j<m; j++){
for(int k = 0; k<n; k++){
cin>>map[i][j][k];
}
}
}
for(int i = 0; i<l; i++){
for(int j = 0; j<m; j++){
for(int k = 0; k<n; k++){
if(!vis[i][j][k] && map[i][j][k]){
res = bfs(i,j,k);
if (res < t) continue;
else{
ans += res;
}
}
}
}
}
cout<<ans<<endl;
return 0;
}