链接:点击打开链接
BFS,三维的广搜,求最少的时间逃出去。hdu数据还是水,发现自己AC代码有一个错误。。。。
#include<iostream>
#include<stdio.h>
#include<queue>
#include<string.h>
using namespace std;
int a[51][51][51],A,B,C,T,b[51][51][51];
int c[6][3]={{0,0,1},{0,0,-1},{1,0,0},{0,1,0},{-1,0,0},{0,-1,0}};
struct ss{
int x,y,z,flag;
};
void bfs(){
int i,j,k;
memset(b,0,sizeof(b));
queue<ss>Q;
ss p,s;
p.x=0,p.y=0,p.z=0,p.flag=0;
b[0][0][0]=1;
Q.push(p);
while(!Q.empty()){
p=Q.front();
Q.pop();
if(p.x==A-1&&p.y==B-1&&p.z==C-1&&p.flag<=T){
printf("%d\n",p.flag);
return;
}
for(i=0;i<6;i++){
s=p;
s.x+=c[i][0],s.y+=c[i][1],s.z+=c[i][2],s.flag+=1;
if(s.x>=0&&s.x<A&&s.y>=0&&s.y<B&&s.z>=0&&s.z<C&&!a[s.x][s.y][s.z]&&!b[s.x][s.y][s.z]){
b[s.x][s.y][s.z]=1;
Q.push(s);
}
}
}
printf("-1\n");
}
int main(){
int i,j,k,K;
scanf("%d",&K);
while(K--){
scanf("%d %d %d %d",&A,&B,&C,&T);
for(i=0;i<A;i++)
for(j=0;j<B;j++)
for(k=0;k<C;k++)
scanf("%d",&a[i][j][k]);
bfs();
}
return 0;
}