一个简单的三维BFS:
刚开始说内存超出了,就把 标记走过的路语句 和 判断到达终点的语句 放在了push(next)之前
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#define N 51
using namespace std;
struct node{
int x,y,z;
int t;
};
int dir[8][3]={{0,0,1},{0,1,0},{1,0,0},{0,0,-1},{0,-1,0},{-1,0,0}};
int a,b,c;
int T;
int sa,sb,sc;
int maze[N][N][N];
bool judge(int x,int y,int z,int t){
if(x<0||x>=a||y<0||y>=b||z<0||z>=c) {
return 1;
}
if(t>T) return 1;
if(maze[x][y][z]==1) return 1;
return 0;
}
int bfs(){
queue<node> myque;
node now,next;
now.x=sa;
now.y=sb;
now.z=sc;
now.t=0;
myque.push(now);
while(!myque.empty())
{
now=myque.front();
myque.pop();
for(int i=0;i<8;i++)
{
next.x=now.x+dir[i][0];
next.y=now.y+dir[i][1];
next.z=now.z+dir[i][2];
next.t=now.t+1;
if(judge(next.x,next.y,next.z,next.t))
{
continue;
}
if(next.x==a-1&&next.y==b-1&&next.z==c-1) {
return next.t;
}
maze[next.x][next.y][next.z]=1;
myque.push(next);
}
}
return -1;
}
int main(){
int times;
scanf("%d",×);
while(times--){
scanf("%d%d%d%d",&a,&b,&c,&T);
for(int i=0;i<a;i++){
for(int j=0;j<b;j++){
for(int k=0;k<c;k++){
scanf("%d",&maze[i][j][k]);
}
}
}
sa=0;
sb=0;
sc=0;
int anw;
anw=bfs();
printf("%d\n",anw);
}
}
原文地址:http://blog.csdn.net/enterpine/article/details/38583535