标签:mes 有一个 for循环 需要 lse 个数 返回 als 技术
#include<cstdio>
#include<queue>
using namespace std;
struct Node{
int x, y, z;
}node;
int X[6] = {0, 0, 0, 0, 1, -1};
int Y[6] = {0, 0, 1, -1, 0, 0};
int Z[6] = {1, -1, 0, 0, 0, 0};
int matrix[1290][130][61];
bool inq[1290][130][61] = {false};
int n, m, slice, T;//记录矩阵大小和层数,T是最少的数量?
bool test(int x, int y, int z){
if(x >= n || x < 0 || y >= m || y <0 || z >= slice || z < 0) return false;
if(matrix[x][y][z] == 0 || inq[x][y][z] == true) return false;
return true;
}
int BFS(int x, int y, int z){
int tot = 0;
queue<Node> q;
node.x = x, node.y = y, node.z = z;
q.push(node);
inq[x][y][z] = true;
while(!q.empty()){
Node top = q.front();
q.pop();
tot++;
for(int i = 0; i < 6; i++){
int newx = top.x + X[i];
int newy = top.y + Y[i];
int newz = top.z + Z[i];
if(test(newx, newy, newz)){
node.x = newx, node.y = newy, node.z = newz;
q.push(node);
inq[newx][newy][newz] = true;
}
}
}
if(tot >= T) return tot;
else return 0;
}
int main(){
scanf("%d%d%d%d", &n, &m, &slice, &T);
for(int i = 0; i < slice; i++){
for(int j = 0; j < n; j++){
for(int k = 0; k < m; k++){
scanf("%d", &matrix[j][k][i]);
}
}
}
int ans = 0;
for(int i = 0; i < slice; i++){
for(int j = 0; j < n; j++){
for(int k = 0; k < m; k++){
if(matrix[j][k][i] == 1 && inq[j][k][i] == false){
ans += BFS(j, k, i);
}
}
}
}
printf("%d\n", ans);
return 0;
}
标签:mes 有一个 for循环 需要 lse 个数 返回 als 技术
原文地址:https://www.cnblogs.com/tsruixi/p/12275000.html