输入样例:
3 4 5 2
1 1 1 1
1 1 1 1
1 1 1 1
0 0 1 1
0 0 1 1
0 0 1 1
1 0 1 1
0 1 0 0
0 0 0 0
1 0 1 1
0 0 0 0
0 0 0 0
0 0 0 1
0 0 0 1
1 0 0 0
输出样例:
26
代码如下:
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
int gra[1286][128][60];
int cnt=0;
int m,n,l,t;
struct node{
int x,y,z;
};
int fd[6][3]={
{
0,0,1},
{
0,0,-1},
{
0,1,0},
{
0,-1,0},
{
1,0,0},
{
-1,0,0},
};
bool check(int x,int y,int z){
if(x<0||x>=m||y<0||y>=n||z<0||z>=l||gra[x][y][z]!=1) return false;
return true;
}
void bfs(int x,int y,int z){
queue<node>q;
gra[x][y][z]=2;
node p;
p.x=x;p.y=y;p.z=z;
q.push(p);
int wei=1;
while(!q.empty()){
p=q.front();
q.pop();
for(int i=0;i<6;++i){
if(check(p.x+fd[i][0],p.y+fd[i][1],p.z+fd[i][2])){
wei++;
gra[p.x+fd[i][0]][p.y+fd[i][1]][p.z+fd[i][2]]=2;
node ppp;
ppp.x=p.x+fd[i][0];
ppp.y=p.y+fd[i][1];
ppp.z=p.z+fd[i][2];
q.push(ppp);
}
}
}
if(wei>=t) cnt+=wei;
}
int main(){
scanf("%d%d%d%d",&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){
scanf("%d",&gra[j][k][i]);
}
}
}
//printf("\n\n");
for(int i=0;i<l;++i){
for(int j=0;j<m;++j){
for(int k=0;k<n;++k){
// printf("%d ",gra[j][k][l]);
if(gra[j][k][i]==1){
bfs(j,k,i);
}
}
// printf("\n");
}
}
/*for(int i=0;i<l;++i){
for(int j=0;j<m;++j){
for(int k=0;k<n;++k){
//cout<<j<<" "<<k<<" "<<i<<" ";
printf("%d ",gra[j][k][i]);
}
printf("\n");
}
}*/
printf("%d",cnt);
return 0;
}