http://acm.hdu.edu.cn/showPRoblem.php?pid=1253
题意就不多说了 迷宫类问题 用bfs 即可
代码如下:
#include <stdio.h>#include <queue>#include <string.h>using namespace std; int A,B,C,T;int map[55][55][55];int vis[55][55][55];int dirx[]={0,0,0,0,1,-1};int diry[]={0,0,1,-1,0,0};int dirz[]={1,-1,0,0,0,0};int flag;struct node{ int x; int y; int z; int step; }; int judge(int x,int y,int z){ if (x>=0&&x<A&&y>=0&&y<B&&z>=0&&z<C&&vis[x][y][z]==0&&map[x][y][z]==0) return 1; return 0;} void bfs(){ queue<node>Q; node a; a.x=0; a.y=0; a.z=0; a.step=0; vis[0][0][0]=1; Q.push(a); flag=1; while (!Q.empty()){ a=Q.front(); Q.pop(); if (a.step>T)//刚开始没加这个判断 超时了 好多次 加了以后 1950ms 险过 { break; } if (a.x==A-1&&a.y==B-1&&a.z==C-1&&a.step<=T){ printf ("%d/n",a.step); flag=0; break; } for (int i=0;i<6;i++){ node b; b=a; b.x+=dirx[i]; b.y+=diry[i]; b.z+=dirz[i]; if (judge(b.x,b.y,b.z)){ b.step++; vis[b.x][b.y][b.z]=1; Q.push(b); } } } if (flag){ printf ("-1/n"); }}int main (){ int n; scanf ("%d",&n); while (n--){ 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",&map[i][j][k]); } } } memset(vis,0,sizeof(vis)); bfs(); } return 0;} 希望大神给提些建议。。。。。。
新闻热点
疑难解答