1.bfs
2.区域块数量统计
3.bfs该图搜索中比dfs花销要小、、、dfs会照成栈溢出(递归层数太多)
#include <bits/stdc++.h>
using namespace std;
int x,y,z,t;
bool g[60][1286][128],vis[60][1286][128];
int ans=0,sum;
int op[6][3] = {{0,0,1},{0,1,0},{1,0,0},{0,0,-1},{0,-1,0},{-1,0,0}};
struct node{
int z,x,y;
};
void bfs(int dz,int dx,int dy)
{
sum = 1;
vis[dz][dx][dy] = true;
int ix,iy,iz;
queue<node > q;
node f1;
f1.x = dx, f1.y = dy, f1.z = dz;
q.push(f1);
while(!q.empty()){
node tp = q.front();
q.pop();
int xx = tp.x ,yy = tp.y , zz = tp.z;
for(int p=0;p<6;p++){
iz = zz + op[p][0];
iy = yy + op[p][1];
ix = xx + op[p][2];
if(iz>=0&&iz<z&&iy>=0&&iy<y&&ix>=0&&ix<x&&vis[iz][ix][iy]==false&&g[iz][ix][iy]==true){
node next;
next.x = ix;
next.y = iy;
next.z = iz;
q.push(next);
vis[iz][ix][iy] = true;
sum++;
}
}
}
}
int main()
{
scanf("%d%d%d%d",&x,&y,&z,&t);
for(int i=0;i<z;i++){
for(int j=0;j<x;j++){
for(int k=0;k<y;k++){
int tp;
scanf("%d",&tp);
g[i][j][k] = tp;
}
}
}
for(int i=0;i<z;i++){
for(int j=0;j<x;j++){
for(int k=0;k<y;k++){
if(vis[i][j][k]==false&&g[i][j][k]==true){
bfs(i,j,k);
if(sum>=t)
ans +=sum;
}
}
}
}
printf("%d",ans);
return 0;
}