【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  
保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
原文地址:https://www.cnblogs.com/ldudxy/p/10841620.html