Acute Stroke (30)

2018-06-18  本文已影响0人  刷爆服务器
#include<iostream>
#include<queue>
using namespace std;
struct node{
    int x,y,z;
};
int M,N,L,T;
int ans=0;
int arr[1300][130][70];
bool visit[1300][130][70];
int xx[6]={1,0,0,-1,0,0};
int yy[6]={0,1,0,0,-1,0};
int zz[6]={0,0,1,0,0,-1};
bool judge(int x,int y,int z){
    if(x<0||x>=M||y<0||y>=N||z<0||z>=L) return false;
    if(arr[x][y][z]==0||visit[x][y][z]==true) return false;
    return true;
}
void BFS(int x,int y,int z){
    int cnt=0;
    node temp;
    temp.x=x;temp.y=y;temp.z=z;
    queue<node> q;
    q.push(temp);
    visit[x][y][z]=true;
    while(!q.empty()){
        node top=q.front();
        q.pop();
        cnt++;
        for(int i=0;i<6;i++){
            int tx=top.x+xx[i];
            int ty=top.y+yy[i];
            int tz=top.z+zz[i];
            if(judge(tx,ty,tz)){
                temp.x=tx;temp.y=ty;temp.z=tz;
                visit[tx][ty][tz]=true;
                q.push(temp);
            }
        }
    }
    if(cnt>=T)
        ans+=cnt;
}
int main() {
    cin>>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++)
                cin>>arr[j][k][i];
    for(int i=0;i<L;i++)
        for(int j=0;j<M;j++)
            for(int k=0;k<N;k++)
                if(arr[j][k][i]==1&&visit[j][k][i]==false)
                    BFS(j,k,i);
    printf("%d",ans);
}
上一篇下一篇

猜你喜欢

热点阅读