生活随笔
收集整理的這篇文章主要介紹了
1091 Acute Stroke (30 分)【难度: 一般 / bfs】
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
https://pintia.cn/problem-sets/994805342720868352/problems/994805375457411072
很常見的題,就是求每一個連通塊的大小。
#include<bits/stdc++.h>
using namespace std
;
const int N
=150;
const int M
=2000;
const int L
=65;
int f
[L
][M
][N
],n
,m
,l
,t
,ans
;
bool st
[L
][M
][N
];
struct node{int x
,y
,z
;};
void bfs(int x
,int y
,int z
)
{int dx
[6]={-1,0,0,1,0,0};int dy
[6]={0,-1,1,0,0,0};int dz
[6]={0,0,0,0,1,-1};int cnt
=1;st
[z
][x
][y
]=1;queue
<node
>q
; q
.push({x
,y
,z
});while(q
.size()){auto t
=q
.front(); q
.pop();x
=t
.x
,y
=t
.y
,z
=t
.z
;for(int i
=0;i
<6;i
++){int tempx
=x
+dx
[i
];int tempy
=y
+dy
[i
];int tempz
=z
+dz
[i
];if(tempx
<0||tempx
>=m
||tempy
<0||tempy
>=n
||tempz
<0||tempz
>=l
) continue;if(st
[tempz
][tempx
][tempy
]) continue;if(!f
[tempz
][tempx
][tempy
]) continue;q
.push({tempx
,tempy
,tempz
});st
[tempz
][tempx
][tempy
]=1,cnt
++;}}if(cnt
>=t
) ans
+=cnt
;
}
int main(void)
{cin
>>m
>>n
>>l
>>t
;for(int i
=0;i
<l
;i
++)for(int j
=0;j
<m
;j
++)for(int z
=0;z
<n
;z
++)cin
>>f
[i
][j
][z
];for(int i
=0;i
<l
;i
++)for(int j
=0;j
<m
;j
++)for(int z
=0;z
<n
;z
++)if(!st
[i
][j
][z
]&&f
[i
][j
][z
]) bfs(j
,z
,i
);cout
<<ans
;return 0;
}
總結(jié)
以上是生活随笔為你收集整理的1091 Acute Stroke (30 分)【难度: 一般 / bfs】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。