D - 胜利大逃亡
来源:互联网 发布:java社区 编辑:程序博客网 时间:2024/05/06 07:43
Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会.
魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,Ignatius每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图,请你计算出Ignatius能否在魔王回来前离开城堡(只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃亡成功),如果可以请输出需要多少分钟才能离开,如果不能则输出-1.
魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始Ignatius被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,Ignatius每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图,请你计算出Ignatius能否在魔王回来前离开城堡(只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃亡成功),如果可以请输出需要多少分钟才能离开,如果不能则输出-1.
特别注意:本题的测试数据非常大,请使用scanf输入,我不能保证使用cin能不超时.在本OJ上请使用Visual C++提交.
13 3 4 200 1 1 10 0 1 10 1 1 11 1 1 11 0 0 10 1 1 10 0 0 00 1 1 00 1 1 0
11
#include<stdio.h>#include<string.h>#include<queue>#include<algorithm>using namespace std;int map[52][52][52];//三维数组int vis[52][52][52];int A,B,C,t,sx,sy,sz,ex,ey,ez;int to[6][3]= {{0,0,1},{0,0,-1},{0,1,0},{0,-1,0},{1,0,0},{-1,0,0}};struct node{ int x,y,z,step;};int check(int x,int y,int z){ if(x<0||y<0||z<0||x>=A||y>=B||z>=C) return 1; else if(map[x][y][z]==1) return 1; else if(vis[x][y][z]) return 1; return 0;}int dfs(){ int i; node a,next; queue<node>Q; a.x=sx,a.y=sy,a.z=sz; a.step=0; vis[sx][sy][sz]=1; Q.push(a); while(!Q.empty()) { a=Q.front(); Q.pop(); if(a.x==ex&&a.y==ey&&a.z==ez) return a.step; for(i=0; i<6; i++) { next=a; next.x=a.x+to[i][0]; next.y=a.y+to[i][1]; next.z=a.z+to[i][2]; if(check(next.x,next.y,next.z)) continue; vis[next.x][next.y][next.z]=1; next.step=a.step+1; Q.push(next); } } return 0;}int main(){ int zs; scanf("%d",&zs); while(zs--) { int i,r,j; scanf("%d%d%d%d",&A,&B,&C,&t); for(i=0; i<A; i++) { for(j=0; j<B; j++) { for(r=0; r<C; r++) scanf("%d",&map[i][j][r]); } } sx=0,sy=0,sz=0; ex=A-1,ey=B-1,ez=C-1; memset(vis,0,sizeof(vis)); int ans; ans=dfs(); if(ans<=t&&ans>0) printf("%d\n",ans); else if(ans==0) printf("-1\n"); else if(ans>t) printf("-1\n"); memset(map,1,sizeof(map));//初始化 否者会超时 } return 0;}
ps:第一次接触三位数组
0 0
- D - 胜利大逃亡
- D - 胜利大逃亡 hdu1253
- hdu1253胜利大逃亡
- hdu1253胜利大逃亡
- 胜利大逃亡
- HDOJ 胜利大逃亡
- hdu1253 胜利大逃亡
- hdu1253胜利大逃亡
- hdoj1253 胜利大逃亡
- 胜利大逃亡
- 胜利大逃亡(bfs)
- 胜利大逃亡
- 胜利大逃亡
- hdoj 胜利大逃亡
- 胜利大逃亡
- HDU1253胜利大逃亡
- 胜利大逃亡(BFS)
- hdu1253(胜利大逃亡)
- 说说AsyncTask的使用方法和理解,有什么优缺点,如何解决
- ubuntu安装mongodb教程
- 静态添加碎片
- 怎么安装 32 位 Windows 映像处理组件
- 145. Binary Tree Postorder Traversal
- D - 胜利大逃亡
- 创建JavaScript代码时需要注意的一些规则
- 锁屏
- 树和森林
- 在Linux环境下打开来自Windows的文本文件出现乱码
- Random类
- HTTP汇总
- Zurmo(十)之zurmoc所有命令详解(三)
- <<effective c++>>笔记