题目链接:L3-004 肿瘤诊断 (30分)
- 两个像素被认为是“连通的”,如果它们有一个共同的切面 --->从这句话推断出这题是一个三维BFS的题
- 用一个三维数组存放数据,遍历每一个数据,因为这里的数据是0和1就用原数据来记录标记它,计算每一个元素周围的体积(数连通体中1的个数),大于t就累加到体积里面
代码如下:
#include<iostream>
#include<queue>
using namespace std;
const int N = 140, M = 1300,L = 70;
struct Node{
int x,y,z;
};
int mp[L][M][N];
int dx[6] = {0,1,0,-1,0,0};
int dy[6] = {1,0,-1,0,0,0};
int dz[6] = {0,0,0,0,1,-1};
int n,m,l,t;
int ans;
void bfs(int i,int j,int k){
queue<Node> q;
int sum = 1;
mp[i][j][k] = 0;
q.push({j,k,i});
while(q.size()){
Node t = q.front();
q.pop();
for(int i = 0; i < 6; i ++ ){
int a = t.x + dx[i];
int b = t.y + dy[i];
int c = t.z + dz[i];
if(a < 0 || a > n-1 || b < 0 || b > m-1 || c < 0 || c > l-1){
continue;
}
if(!mp[c][a][b]) continue;
mp[c][a][b] = 0;
sum ++;
q.push({a,b,c});
}
}
if(sum >= t) ans += sum;
}
int main(){
cin >> n >> m >> l >> t;
for(int i = 0; i < l; i ++ ){
for(int j = 0; j < n; j ++ ){
for(int k = 0; k < m; k ++ ){
cin >> mp[i][j][k];
}
}
}
for(int i = 0; i < l; i ++ ){
for(int j = 0; j < n; j ++ ){
for(int k = 0; k < m; k ++ ){
if(mp[i][j][k]) bfs(i,j,k);
}
}
}
cout<<ans;
return 0;
}


京公网安备 11010502036488号