题目描述
分析:
三维的搜索题,dfs会因为深度太深导致出现段错误,使用bfs进行搜索
#include<cstdio>
#include<queue>
using namespace std;
struct node{
int x,y,z;
};
int M,N,L,T;
int map[1290][135][65];
bool visit[1290][135][65]={false};
int X[6]={0,0,0,0,1,-1};
int Y[6]={0,0,1,-1,0,0};
int Z[6]={1,-1,0,0,0,0};
bool judge(int x,int y,int z){
if(x>=N||x<0||y>=M||y<0||z>=L||z<0){
return false;
}
if(map[x][y][z]==0||visit[x][y][z]==true){
return false;
}
return true;
}
int BFS(int x,int y,int z){
queue<node>q;
node temp;
temp.x=x;
temp.y=y;
temp.z=z;
q.push(temp);
int num=0;
visit[x][y][z]=true;
while(!q.empty()){
node now=q.front();
q.pop();
num++;
for(int i=0;i<6;i++){
int dx=now.x+X[i];
int dy=now.y+Y[i];
int dz=now.z+Z[i];
if(judge(dx,dy,dz)){
temp.x=dx;
temp.y=dy;
temp.z=dz;
q.push(temp);
visit[dx][dy][dz]=true;
}
}
}
if(num>=T) return num;
else return 0;
}
int main(){
scanf("%d%d%d%d",&N,&M,&L,&T);
for(int z=0;z<L;z++)
for(int x=0;x<N;x++)
for(int y=0;y<M;y++){
scanf("%d",&map[x][y][z]);
}
int num=0;
for(int z=0;z<L;z++)
for(int x=0;x<N;x++)
for(int y=0;y<M;y++){
if(map[x][y][z]==1&&!visit[x][y][z])
num+=BFS(x,y,z);
}
printf("%d\n",num);
return 0;
}