数组的大小不能开太大,否则会出现段错误
用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\n",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\n",tail);
113 if (tail>=t)
114 count+=tail;
115 }
116
117 printf("%ld",count);
118 return 0;
119 }