题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805375457411072
漏了的几个点
- 增量数组一开始忘了设置了,注意一下二维和三维的增量数组形式
- BFS函数中的while中的for循环,里面只有一层!!!目的是循环一遍增量数组
- 三维数组的输入,三层循环嵌套,最外层是高度z,然后才是x,y
代码
#include<algorithm>#include<queue>#include<iostream>using namespace std;struct Node{int x, y, z;}node;int m, n, l, t;int matrix[1290][135][70];int inq[1290][135][70];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};bool judge(int x, int y, int z){if(x >= m || y >= n || z >= l || x < 0 || y < 0 || z < 0) return false;if(matrix[x][y][z] == 0) return false;if(inq[x][y][z] == true) return false;return true;}int BFS(int x, int y, int z){int count = 1;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();for(int i = 0; i < 6; i++){node.x = top.x + X[i];node.y = top.y + Y[i];node.z = top.z + Z[i];if(judge(node.x, node.y, node.z)){count++;inq[node.x][node.y][node.z] = true;q.push(node);}}}return count;}int main(){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", &matrix[i][j][k]);}}}int ans = 0, temp;for(int k = 0; k < l; k++){for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){if(matrix[i][j][k] == 1 && inq[i][j][k] == false){temp = BFS(i, j, k);if(temp >= t) ans += temp;}}}}printf("%d",ans);return 0;}
