数组的大小不能开太大,否则会出现段错误
用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 }