首页 > 学院 > 开发设计 > 正文

1091. Acute Stroke (30)

2019-11-11 05:09:22
字体:
来源:转载
供稿:网友

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;}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表