1091. Acute Stroke (30)

来源:互联网 发布:善领dsa p57数据升级包 编辑:程序博客网 时间:2024/05/16 01:29

1091. Acute Stroke (30)
考察bfs

#include <iostream>#include <queue>using namespace std;const int Maxi=128,Maxj=1286,Maxk=60;int Matrix[Maxi][Maxj][Maxk];int n,m,l,t,ans=0;int dx[6]={1,0,0,-1,0,0};int dy[6]={0,1,0,0,-1,0};int dz[6]={0,0,1,0,0,-1};struct node{    int x,y,z;};bool israng(int x,int y,int z){    if(x>=0&&x<n&&y>=0&&y<m&&z>=0&&z<l)        return true;    return false;}void bfs(int x,int y,int z){    int ret=0;    node temp;    temp.x=x;temp.y=y;temp.z=z;    queue<node> q;    q.push(temp);Matrix[x][y][z]=0;++ret;    while(!q.empty())    {        node cur=q.front();        q.pop();        for(int i=0;i<6;++i)        {            int nx=cur.x+dx[i];            int ny=cur.y+dy[i];            int nz=cur.z+dz[i];            if(israng(nx,ny,nz)&&Matrix[nx][ny][nz])            {                Matrix[nx][ny][nz]=0;++ret;                temp.x=nx;temp.y=ny;temp.z=nz;                q.push(temp);            }        }    }    if(ret>=t)        ans+=ret;}int main(){    cin>>m>>n>>l>>t;    for(int k=0;k<l;++k)        for(int j=0;j<m;++j)            for(int i=0;i<n;++i)                cin>>Matrix[i][j][k];    for(int k=0;k<l;++k)        for(int j=0;j<m;++j)            for(int i=0;i<n;++i)                if(Matrix[i][j][k])bfs(i,j,k);    cout<<ans;    return 0;}
0 0
原创粉丝点击