1091 Acute Stroke (30 分)
读懂题后发现,这不就三维\(BFS\)裸题吗,\(30\)分的裸题可还行。
输入数据时是按多个二维矩阵的方式读入的,因此3层for循环中的第一层需要遍历矩阵编号,第二、三层才是单个矩阵的数据读入。
const int N=1300,M=130;
struct Node
{
int x,y,z;
};
bool g[N][M][65];
int n,m,l,t;
bool check(int x,int y,int z)
{
return x>=0 && x<n && y>=0 && y<m && z>=0 && z<l;
}
int bfs(int x,int y,int z)
{
queue<Node> q;
q.push({x,y,z});
g[x][y][z]=0;
int cnt=1;
while(q.size())
{
Node t=q.front();
q.pop();
for(int i=0;i<6;i++)
{
int a=t.x+dx3[i],b=t.y+dy3[i],c=t.z+dz3[i];
if(check(a,b,c) && g[a][b][c])
{
g[a][b][c]=0;
cnt++;
q.push({a,b,c});
}
}
}
return cnt;
}
int main()
{
cin>>n>>m>>l>>t;
for(int k=0;k<l;k++)
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>g[i][j][k];
int res=0;
for(int k=0;k<l;k++)
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(g[i][j][k])
{
int cnt=bfs(i,j,k);
if(cnt >= t) res+=cnt;
}
cout<<res<<endl;
//system("pause");
return 0;
}