PTA L3-004 肿瘤诊断 (30分)

PTA L3-004 肿瘤诊断 (30分)

第一次写博客。以后做出一些比较难的题目都会要求自己写篇博客记录一下,同时以供复习。

题意大概如下:

在这里插入图片描述

先上代码


#include<bits/stdc++.h>
using namespace std;
int a[75][150][1320];			//定义三维数组
int math(int i,int m,int n,int t)
{
	int count=0;					
	if(a[i][m][n]==1){
		a[i][m][n]=2;				//  2表示已经被计算过,防止重复计算 
		count++;										//遍历开始;
		if(a[i][m+1][n]==1) {						    //三维数组一个个元素搜索过去 
			count+=math(i,m+1,n,t);a[i][m+1][n]==2;		//6个if语句代表判断上下前后左右的元素 
			}											//如果搜出来一个1 
		if(a[i][m-1][n]==1) {							//就判断该元素的上下前后左右的元素是否是1 
			count+=math(i,m-1,n,t);a[i][m-1][n]==2;		//如果上下前后左右元素中有一个是1 
			}											//那么继续判断该元素相对应的上下前后左右的元素下
		if(a[i][m][n+1]==1) {							//直至停止 
			count+=math(i,m,n+1,t);a[i][m][n+1]==2;		//count用来记录这些为1的元素的数量,之后与t作比较 
			}
		if(a[i][m][n-1]==1) {								
			count+=math(i,m,n-1,t);a[i][m][n-1]==2;
			}
		if(a[i+1][m][n]==1) {
			count+=math(i+1,m,n,t);a[i+1][m][n]==2;
			}
		if(a[i-1][m][n]==1) {
			count+=math(i-1,m,n,t);a[i-1][m][n]==2;
			}											//这种方法就类似于“连锁反应” 
	}													//只要揪出来一个等于1,那么他旁边的等于1的元素全跑不了 
	return count;
}
int main()
{
	int m,n,l,t;
	int count=0;
	cin>>m>>n>>l>>t;
	for(int i=1;i<=l;i++)
	{
		for(int j=1;j<=m;j++)
			for(int k=1;k<=n;k++){
				scanf("%d",&a[i][j][k]);				//按照题意输入 
			}	
	}
	for(int i=1;i<=l;i++)
	{
		for(int j=1;j<=m;j++)
			for(int k=1;k<=n;k++){
				int tt=math(i,j,k,t);					//tt存math函数的返回值	 
				if(tt>=t) count+=tt;					//tt>t才记录 (题意的条件) 
			}	
	}
	printf("%d\n",count);
}

这就是深度优先搜索。遍历判断每一个元素并标记。
需要注意的是:
int tt=math(i,j,k,t);
if(tt>=t) count+=tt;
这两句不能直接用if(math(i,j,k,t)>=t) count+=math(i,j,k,t);
否则math函数会运算两遍,输出便变成了0。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值