#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
int X[6]={0,0,0,0,1,-1};
int Y[6]={1,0,-1,0,0,0};
int Z[6]={0,1,0,-1,0,0};
int m,n,l,t;
bool inq[1290][130][60]={false};
int matrix[1290][130][60];
struct Node
{
int x;
int y;
int z;
}node;
bool judge(int x,int y,int z)
{
if(x>=m||y>=n||x<0||y<0||z>=l||z<0)
{
return false;
}
if(matrix[x][y][z]==0||inq[x][y][z]==true)
return false;
return true;
}
int bfs(int x,int y,int z)
{
queue<Node> Q;
node.x=x;
node.y=y;
node.z=z;
Q.push(node);
inq[x][y][z]=true;
int tot=0;
while(!Q.empty())
{
Node top=Q.front();
Q.pop();
tot++;
for(int i=0;i<6;i++)
{
int newx=top.x+X[i];
int newy=top.y+Y[i];
int newz=top.z+Z[i];
if(judge(newx,newy,newz))
{
node.x=newx;
node.y=newy;
node.z=newz;
Q.push(node);
inq[newx][newy][newz]=true;
}
}
}
if(tot>=t)
return tot;
else return 0;
}
int main()
{
scanf("%d%d%d%d",&m,&n,&l,&t);
for(int z=0;z<l;z++)
for(int x=0;x<m;x++)
for(int y=0;y<n;y++)
{
scanf("%d",&matrix[x][y][z]);
}
int ans=0;
for(int z=0;z<l;z++)
for(int x=0;x<m;x++)
for(int y=0;y<n;y++)
{
if(inq[x][y][z]==false&&matrix[x][y][z]==1)
ans=ans+bfs(x,y,z);
}
printf("%d",ans);
system("pause");
return 0;
}
PAT 1091
最新推荐文章于 2021-09-13 16:59:28 发布