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

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

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

  1 #include <stdio.h> 
  2 #include <stdlib.h>
  3 #include <string.h>
  4 #include <stdbool.h>
  5 #define maxm 1286+1
  6 #define maxn 128+1
  7 #define maxl 60+1
  8 //#define maxt maxm*maxn*maxl
  9 #define maxt 1000000
 10 
 11 //bool ***a;
 12 
 13 bool a[1300][150][70];
 14 
 15 long dx[6]={1,-1,0,0,0,0};
 16 long dy[6]={0,0,1,-1,0,0};
 17 long dz[6]={0,0,0,0,1,-1};
 18 
 19 long count=0,area,m,n,l,t;
 20 long x[maxt],y[maxt],z[maxt];
 21 
 22 //void dfs(long x,long y,long z)
 23 //{
 24 //    a[x][y][z]=false;
 25 //    area++;
 26 //    long xx,yy,zz,p;
 27 //    for (p=0;p<6;p++)
 28 //    {
 29 //        xx=x+dx[p];
 30 //        yy=y+dy[p];
 31 //        zz=z+dz[p];
 32 //        if (xx>=1 && xx<=m && yy>=1 && yy<=n && zz>=1 && zz<=l && a[xx][yy][zz])
 33 //            dfs(xx,yy,zz);
 34 //    }
 35 //}
 36 
 37 int main()
 38 {
 39     long i,j,k,p;
 40     long xx,yy,zz,head,tail;
 41     scanf("%ld%ld%ld%ld",&m,&n,&l,&t);
 42     /*
 43     a=(bool ***) malloc (sizeof(bool **)*62);
 44     for (i=0;i<62;i++)
 45         a[i]=(bool **) malloc (sizeof(bool *)*1288);
 46     for (i=0;i<62;i++)
 47         for (j=0;j<1288;j++)
 48             a[i][j]=(bool *) malloc (sizeof(bool )*130);
 49     */
 50     
 51 
 52 //    if (m<n)
 53 //    {
 54 //        for (k=1;k<=l;k++)
 55 //            {
 56 //                for (i=1;i<=m;i++)
 57 //                    for (j=1;j<=n;j++)
 58 //                    {
 59 //                        scanf("%ld",&v);
 60 //                        if (v)
 61 //                            a[j][i][k]=true;
 62 //                        else
 63 //                            a[j][i][k]=false;
 64 //                    }
 65 //            }
 66 //    }
 67 //    else
 68 //    {
 69         for (k=1;k<=l;k++)
 70             {
 71                 for (i=1;i<=m;i++)
 72                     for (j=1;j<=n;j++)
 73                         scanf("%ld",&a[i][j][k]);
 74             }        
 75 //    }
 76     
 77     for (i=1;i<=m;i++)
 78         for (j=1;j<=n;j++)
 79             for (k=1;k<=l;k++)
 80                 if (a[i][j][k])
 81                 {
 82 //                    area=0;
 83 //                    dfs(i,j,k);
 84 ////                    printf("%ld
",area);
 85 //                    if (area>=t)
 86 //                        count+=area;
 87                         
 88                     head=0;
 89                     tail=1;
 90                     x[1]=i;
 91                     y[1]=j;
 92                     z[1]=k;
 93                     a[i][j][k]=false;
 94                     while (head<tail)
 95                     {
 96                         head++;
 97                         for (p=0;p<6;p++)
 98                         {
 99                             xx=x[head]+dx[p];
100                             yy=y[head]+dy[p];
101                             zz=z[head]+dz[p];
102                             if (xx>=1 && xx<=m && yy>=1 && yy<=n && zz>=1 && zz<=l && a[xx][yy][zz])
103                             {
104                                 a[xx][yy][zz]=false; 
105                                 tail++;
106                                 x[tail]=xx;
107                                 y[tail]=yy;
108                                 z[tail]=zz;
109                             }
110                         }
111                     }
112 //                    printf("%ld
",tail);
113                     if (tail>=t)
114                         count+=tail;            
115                 }
116 
117     printf("%ld",count);
118     return 0;
119 }
原文地址:https://www.cnblogs.com/cmyg/p/8589261.html