您的位置:首页 > 其它

PAT 1091. Acute Stroke (30)

2015-03-08 22:08 323 查看
用BFS做的。
#include <stdio.h>
#include <queue>
using namespace std;

struct node{
int i,j,k;
node(int i=-1,int j=-1,int k=-1):i(i),j(j),k(k){}//!!
};
int M,N,L,T;
bool visited[61][1280][128];
int pic[61][1280][128];
int local,total;
queue<node> q;
bool avail(int i,int j,int k){
if (i>=L||j>=M||k>=N||i<0||j<0||k<0)
return false;
if (pic[i][j][k]==0)
return false;
if (visited[i][j][k]==true)
return false;
return true;
}
void push(int i,int j,int k){
if (avail(i, j, k)) {
visited[i][j][k]=1;
node newP(i,j,k);
q.push(newP);
local++;
}
}
void BFS(){
while (!q.empty()) {
node tmp=q.front();
q.pop();
int i=tmp.i,j=tmp.j,k=tmp.k;
push(i-1,j,k);
push(i+1,j,k);
push(i,j-1,k);
push(i,j+1,k);
push(i,j,k-1);
push(i,j,k+1);

}
}
int main(){
//freopen("/Users/pantingting/Documents/code/data/input", "r", stdin);
scanf("%d%d%d%d",&M,&N,&L,&T);
for (int i=0; i<L; i++){
for (int j=0; j<M; j++){
for (int k=0; k<N; k++){
scanf("%d",&pic[i][j][k]);
visited[i][j][k]=false;
}
}
}
for (int i=0; i<L; i++) {
for (int j=0; j<M; j++) {
for (int k=0; k<N; k++) {
if (avail(i, j, k)) {
node nd(i,j,k);
q.push(nd);
visited[i][j][k]=true;
local=1;
BFS();
if (local>=T) {
total+=local;
}
}

}
}
}
printf("%d\n",total);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: