PAT A1091 Acute Stroke
对于坐标平面的bfs模板题~
#include<bits/stdc++.h> using namespace std; const int maxn=1010; bool visit[1300][130][80]={false}; int adj[1300][130][80]; int n,m,l,K; int X[6]={1,0,0,-1,0,0}; int Y[6]={0,1,0,0,-1,0}; int Z[6]={0,0,1,0,0,-1}; struct node { int x,y,z; }; bool judge (int x,int y,int z) { if (x>=n||x<0||y>=m||y<0||z>=l||z<0) return false; if (adj[x][y][z]==0) return false; if (visit[x][y][z]==true) return false; return true; } int bfs (int x,int y,int z) { queue<node> q; q.push({x,y,z}); int cnt=0; visit[x][y][z]=true; while (!q.empty()) { node now=q.front(); q.pop(); cnt++; for (int i=0;i<6;i++) { int tx=now.x+X[i]; int ty=now.y+Y[i]; int tz=now.z+Z[i]; if (judge(tx,ty,tz)) { q.push({tx,ty,tz}); visit[tx][ty][tz]=true; //cnt++; } } } if (cnt>=K) return cnt; return 0; } int main () { scanf ("%d %d %d %d",&n,&m,&l,&K); for (int i=0;i<l;i++) for (int j=0;j<n;j++) for (int k=0;k<m;k++) scanf ("%d",&adj[j][k][i]); int cnt=0; for (int i=0;i<l;i++) for (int j=0;j<n;j++) for (int k=0;k<m;k++) if (visit[j][k][i]==false&&adj[j][k][i]==1) cnt+=bfs(j,k,i); printf ("%d\n",cnt); return 0; }