3维走迷宫,走完记录一下就行
#include<bits/stdc++.h>
using namespace std;
const int M=1286, N=128, L=60;
int g[L][M][N];
struct Pt {
int z, x, y;
};
queue<Pt> q;
int m, n, l, t;
int d[][3]={
{1, 0, 0},
{-1, 0, 0},
{0, 1, 0},
{0, -1, 0},
{0, 0, 1},
{0, 0, -1},
};
int bfs(Pt pt) {
q.push(pt);
g[pt.z][pt.x][pt.y]=0;
int v=1;
while(q.size()) {
auto t=q.front();
q.pop();
for(int i=0; i<6; i++) {
int z=t.z+d[i][0], x=t.x+d[i][1], y=t.y+d[i][2];
if(~z && ~x && ~y && z<l && x<m && y<n && g[z][x][y]) {
g[z][x][y]=0;
q.push({z, x, y});
v++;
}
}
}
return v;
}
int main() {
cin >> m >> n >> l >> t;
for(int i=0; i<l; i++)
for(int j=0; j<m; j++)
for(int k=0; k<n; k++)
cin >> g[i][j][k];
int ans=0;
for(int i=0; i<l; i++)
for(int j=0; j<m; j++)
for(int k=0; k<n; k++)
if(g[i][j][k]) {
int v=bfs({i, j, k});
if(v>=t) ans+=v;
}
cout << ans;
}