Advertisement

pat--肿瘤诊断

阅读量:
肿瘤诊断(30 分)

用于诊断肿瘤疾病时,计算其体积是一个关键环节。通过病灶扫描切片中标注出的疑似肿瘤区域,请您通过以下步骤计算其体积。

输入格式:

请提供四个正整数值:、以及、, 其中与之和代表了每个切片的最大分辨率(每个切片均为一个二维像素矩阵)。而参数则表示了切片总数;为一个整数值阈限(若计算出疑似肿瘤区域相连体积低于,则该区域将被忽略处理)。

最后给出一张切片。每张切片均可通过二进制矩阵进行表示,在该矩阵中数值为1的位置代表疑似肿瘤区域的像素点而数值为0的位置则对应正常区域的像素点。鉴于切片厚度可视为恒定参数因此只需计算连通体内的1的数量即可获得对应的体积度量然而在实际应用中可能会遇到多个独立肿瘤体的情况这时就需要根据预先设定的标准确定其体积达到或超过某个预设阈值的标准当且仅当它们共享一个平面时被视为相连如图所示六个红色像素均与蓝色中心像素相连

输出格式:

在一行中输出肿瘤的总体积。

输入样例:

复制代码
 3 4 5 2

    
 1 1 1 1
    
 1 1 1 1
    
 1 1 1 1
    
 0 0 1 1
    
 0 0 1 1
    
 0 0 1 1
    
 1 0 1 1
    
 0 1 0 0
    
 0 0 0 0
    
 1 0 1 1
    
 0 0 0 0
    
 0 0 0 0
    
 0 0 0 1
    
 0 0 0 1
    
 1 0 0 0

输出样例:

复制代码
    26

刚开始用的dfs有两个段错误,估计时递归炸掉了,换了bfs直接过了

复制代码
 #include<bits/stdc++.h>

    
 using namespace std;
    
 int a[65][1400][1400]={0};
    
 int f[6][3]={{1,0,0},{0,1,0},{-1,0,0},{0,-1,0},{0,0,1},{0,0,-1}};
    
  int n,m,p,t;
    
 int sum=0;
    
 struct node{
    
 	int x,y,k;
    
 	node(){ }
    
 	node(int x,int y,int k)
    
 	{
    
 		this->x=x;
    
 		this->y=y;
    
 		this->k=k;
    
 	}
    
 };
    
 void bfs(int k,int x,int y)
    
 {
    
 	queue<node> q;
    
 	node s;
    
 	q.push(node(x,y,k));
    
 	while(!q.empty())
    
 	{
    
 	    s=q.front();
    
 	    q.pop();
    
 	    for(int i=0;i<6;i++)
    
 	    {
    
 	    	int x1=s.x+f[i][0];
    
 	    	int y1=s.y+f[i][1];
    
 	    	int k1=s.k+f[i][2];
    
 	    	if(x1>0&&y1>0&&k1>0&&x1<=n&&y1<=m&&k1<=p&&a[k1][x1][y1]==1)
    
 	    	{
    
 	    		a[k1][x1][y1]=0;
    
 	    		sum++;
    
 	    		q.push(node(x1,y1,k1));
    
 			}
    
 		}
    
 	   }
    
 }
    
 int main()
    
 {
    
     cin>>n>>m>>p>>t;
    
   for(int k=1;k<=p;k++)
    
   {
    
   	 for(int i=1;i<=n;i++)
    
   	 {
    
   	 	for(int j=1;j<=m;j++)
    
   	 	{
    
   	 		cin>>a[k][i][j];
    
 		   }
    
 	   }
    
   }
    
    int s=0;
    
    for(int k=1;k<=p;k++)
    
   {
    
   	 for(int i=1;i<=n;i++)
    
   	 {
    
   	 	for(int j=1;j<=m;j++)
    
   	 	{
    
   	 		if(a[k][i][j]==1)
    
   	 		{
    
   	 			sum=1;
    
   	 			a[k][i][j]=0;
    
   	 			bfs(k,i,j);
    
   	 			if(sum>=t)
    
   	 			{
    
   	 			   s+=sum;
    
 				}
    
 			}
    
 	    }
    
 	 }
    
   }
    
   cout<<s;
    
 }

全部评论 (0)

还没有任何评论哟~