团体程序设计天梯赛 L3-004. 肿瘤诊断

时间:2023-03-09 09:07:54
团体程序设计天梯赛 L3-004. 肿瘤诊断

数组的大小不能开太大,否则会出现段错误

用bfs而不用dfs,dfs存储太多中间过程,会超内存

 #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define maxm 1286+1
#define maxn 128+1
#define maxl 60+1
//#define maxt maxm*maxn*maxl
#define maxt 1000000 //bool ***a; bool a[][][]; long dx[]={,-,,,,};
long dy[]={,,,-,,};
long dz[]={,,,,,-}; long count=,area,m,n,l,t;
long x[maxt],y[maxt],z[maxt]; //void dfs(long x,long y,long z)
//{
// a[x][y][z]=false;
// area++;
// long xx,yy,zz,p;
// for (p=0;p<6;p++)
// {
// xx=x+dx[p];
// yy=y+dy[p];
// zz=z+dz[p];
// if (xx>=1 && xx<=m && yy>=1 && yy<=n && zz>=1 && zz<=l && a[xx][yy][zz])
// dfs(xx,yy,zz);
// }
//} int main()
{
long i,j,k,p;
long xx,yy,zz,head,tail;
scanf("%ld%ld%ld%ld",&m,&n,&l,&t);
/*
a=(bool ***) malloc (sizeof(bool **)*62);
for (i=0;i<62;i++)
a[i]=(bool **) malloc (sizeof(bool *)*1288);
for (i=0;i<62;i++)
for (j=0;j<1288;j++)
a[i][j]=(bool *) malloc (sizeof(bool )*130);
*/ // if (m<n)
// {
// for (k=1;k<=l;k++)
// {
// for (i=1;i<=m;i++)
// for (j=1;j<=n;j++)
// {
// scanf("%ld",&v);
// if (v)
// a[j][i][k]=true;
// else
// a[j][i][k]=false;
// }
// }
// }
// else
// {
for (k=;k<=l;k++)
{
for (i=;i<=m;i++)
for (j=;j<=n;j++)
scanf("%ld",&a[i][j][k]);
}
// } for (i=;i<=m;i++)
for (j=;j<=n;j++)
for (k=;k<=l;k++)
if (a[i][j][k])
{
// area=0;
// dfs(i,j,k);
//// printf("%ld\n",area);
// if (area>=t)
// count+=area; head=;
tail=;
x[]=i;
y[]=j;
z[]=k;
a[i][j][k]=false;
while (head<tail)
{
head++;
for (p=;p<;p++)
{
xx=x[head]+dx[p];
yy=y[head]+dy[p];
zz=z[head]+dz[p];
if (xx>= && xx<=m && yy>= && yy<=n && zz>= && zz<=l && a[xx][yy][zz])
{
a[xx][yy][zz]=false;
tail++;
x[tail]=xx;
y[tail]=yy;
z[tail]=zz;
}
}
}
// printf("%ld\n",tail);
if (tail>=t)
count+=tail;
} printf("%ld",count);
return ;
}