HDU-1253-胜利大逃亡
2013-06-25 23:05
267 查看
这个题比较坑的BFS吧,注意如果判边界的话可能会超时,最好先人为加边界,然后进行搜索,
搜索最好是队尾判断,因为可能出现起点和终点相同的数据~WA了很久
代码:
搜索最好是队尾判断,因为可能出现起点和终点相同的数据~WA了很久
代码:
#include<cstdio> #include<cstring> #include<iostream> using namespace std; const int maxn=52; struct node { int x; int y; int z; int ans; }q[1000001]; int a,b,c,t,ans,map[maxn][maxn][maxn]; int movex[6]={1,-1,0,0,0,0},movey[6]={0,0,1,-1,0,0},movez[6]={0,0,0,0,1,-1}; bool vis[maxn][maxn][maxn]; void BFS() { memset(vis,0,sizeof(vis)); int pre=0,last=0; q[last++]=(node){1,1,1,0}; while(pre<last) { node v=q[pre++]; if(v.x==a&&v.y==b&&v.z==c) { ans=v.ans; return; } if(v.ans>t) return; for(int i=0;i<6;i++) { int itx=v.x+movex[i]; int ity=v.y+movey[i]; int itz=v.z+movez[i]; if(map[itx][ity][itz]!=0||vis[itx][ity][itz]) continue; vis[itx][ity][itz]=1; q[last++]=(node){itx,ity,itz,v.ans+1}; } } } int main() { int T; scanf("%d",&T); while(T--) { ans=-1; memset(map,1,sizeof(map)); scanf("%d%d%d%d",&a,&b,&c,&t); for(int i=1;i<=a;i++) for(int j=1;j<=b;j++) for(int k=1;k<=c;k++) scanf("%d",&map[i][j][k]); BFS(); printf("%d\n",ans); } return 0; }
相关文章推荐
- hdu 1253 胜利大逃亡
- [ACM] hdu 1253 胜利大逃亡 (三维BFS)
- hdu 1253 胜利大逃亡 (BFS)
- hdu 1253 胜利大逃亡(bfs)
- HDU 1253 - 胜利大逃亡(BFS)
- HDU 1253 胜利大逃亡(三维BFS)
- hdu 1253:胜利大逃亡(基础广搜BFS)
- HDU 1253 胜利大逃亡 NYOJ 523【BFS】
- HDU 1253 胜利大逃亡(三维BFS)
- HDU 1253 胜利大逃亡
- HDU 1253 胜利大逃亡
- hdu-1253-胜利大逃亡(bfs)
- hdu 1253 胜利大逃亡
- hdu 1253 胜利大逃亡
- HDU 1253 胜利大逃亡
- HDU 1253 胜利大逃亡(BFS)
- hdu 杭电 1253 胜利大逃亡
- hdu 1253 胜利大逃亡(简单题)
- hdu 1253 胜利大逃亡 bfs
- hdu 1253 胜利大逃亡_三维