#include<stdio.h>
int dir[6][3] = {{0,0,1},{0,0,-1},{1,0,0},{-1,0,0},{0,1,0},{0,-1,0}};
int map[55][55][55];
int A, B, C, T;
int minute;
void count(int step, int x, int y, int z)
{
//printf("step:%d\n",step);
int i, m, n, p;
if(step > T){
return;
}
else if(x == A - 1 && y == B - 1 && z == C - 1){
if(step < minute)//寻找最短时间
minute = step;
return;
}
else{
// printf("pro3\n");
for(i = 0; i < 6; i++){
// printf("step:%d\n",step);
// printf("i : %d\n", i);
m = x, n = y, p = z;
m = m + dir[i][0];
n = n + dir[i][1];
p = p + dir[i][2];
if(m < 0 || n < 0 || p < 0 || m >= A || n >= B || p >= C || map[m][n][p] == 1){
//printf("m:%d n:%d p:%d\n",m, n, p);
continue;
}
else{
// printf("map[%d][%d][%d]\n",m, n, p);
map[m][n][p] = 1;
count(step + 1,m, n, p);
map[m][n][p] = 0;
}
}
}
}
int main(){
int i, j, k;// for count;
int n;
scanf("%d", &n);
while(n--){
minute = 1000000;
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",&map[i][j][k]);
}
map[0][0][0] = 1;
count(0, 0, 0, 0);
if(minute <1000000){
printf("minute:%d\n", minute);
}
else
printf("-1\n");
}
return 0;
}
深搜虽然不可用,但是 也见识到了新的方法
关于输出
我的结果虽然对了却因为 没考虑全什么情况下会返回而错误了
3种请况下会返回:1 无路可走 2 时间超了 3 到终点了