BFS遍历
//
// main.cpp
// PATA1091
//
// Created by Phoenix on 2018/2/21.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
int m, n, l, t;
int G[1290][130][65];
bool vis[1290][130][65];
struct node {
int x, y, z;
};
int x_add[6] = {1, -1, 0, 0, 0, 0};
int y_add[6] = {0, 0, 1, -1, 0, 0};
int z_add[6] = {0, 0, 0, 0, 1, -1};
int ans = 0;
void BFS(int x, int y, int z){
int num = 0;
node st;
st.x = x; st.y = y; st.z = z;
queue<node> q;
q.push(st);
vis[x][y][z] = true;
while(!q.empty()) {
node top = q.front();
num++;
q.pop();
for(int i = 0; i < 6; i++) {
int x_new = top.x + x_add[i];
int y_new = top.y + y_add[i];
int z_new = top.z + z_add[i];
if(x_new >= 0 && x_new < m && y_new >= 0 && y_new < n && z_new >= 0 && z_new < l){
if(vis[x_new][y_new][z_new] == false && G[x_new][y_new][z_new] == 1){
vis[x_new][y_new][z_new] = true;
node newnode;
newnode.x = x_new;
newnode.y = y_new;
newnode.z = z_new;
q.push(newnode);
}
}
}
}
if(num >= t) ans += num;
}
void BFStravel(){
for(int k = 0; k < l; k++) {
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
if(vis[i][j][k] == false && G[i][j][k] == 1) {
BFS(i, j, k);
}
}
}
}
}
int main(int argc, const char * argv[]) {
scanf("%d%d%d%d", &m, &n, &l, &t);
for(int k = 0; k < l; k++) {
for(int i = 0; i < m; i++) {
for(int j = 0; j < n; j++) {
scanf("%d", &G[i][j][k]);
}
}
}
BFStravel();
printf("%d\n", ans);
return 0;
}