【PAT甲级】1091 Acute Stroke (30 分)(BFS)
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,l,t; 4 int a[1307][137][67]; 5 int vis[1307][137][67]; 6 typedef struct{ 7 int x,y,z; 8 }node; 9 int xx[6]={0,0,0,0,1,-1}; 10 int yy[6]={0,0,1,-1,0,0}; 11 int zz[6]={1,-1,0,0,0,0}; 12 node p; 13 int bfs(int x,int y,int z){ 14 queue<node>q; 15 vis[x][y][z]=1; 16 p.x=x; 17 p.y=y; 18 p.z=z; 19 q.push(p); 20 int sum=0; 21 while(!q.empty()){ 22 node tmp=q.front(); 23 q.pop(); 24 sum++; 25 for(int i=0;i<6;++i){ 26 int tx=tmp.x+xx[i]; 27 int ty=tmp.y+yy[i]; 28 int tz=tmp.z+zz[i]; 29 if(tx>0&&tx<=n&&ty>0&&ty<=m&&tz>0&&tz<=l&&a[tx][ty][tz]&&!vis[tx][ty][tz]){ 30 p.x=tx; 31 p.y=ty; 32 p.z=tz; 33 q.push(p); 34 vis[tx][ty][tz]=1; 35 } 36 } 37 } 38 if(sum>=t) 39 return sum; 40 return 0; 41 } 42 int main(){ 43 std::ios::sync_with_stdio(false); 44 cin>>n>>m>>l>>t; 45 for(int i=1;i<=l;++i) 46 for(int j=1;j<=n;++j) 47 for(int k=1;k<=m;++k) 48 cin>>a[j][k][i]; 49 int ans=0; 50 for(int i=1;i<=l;++i) 51 for(int j=1;j<=n;++j) 52 for(int k=1;k<=m;++k) 53 if(a[j][k][i]&&!vis[j][k][i]) 54 ans+=bfs(j,k,i); 55 cout<<ans; 56 return 0; 57 } 58
保持热爱 不懈努力
不试试看怎么知道会失败呢(划掉)
世上无难事 只要肯放弃(划掉)