标签:bfs
从前有个叫hck的骑士,为了救我们美丽的公主,潜入魔王的老巢,够英雄吧。不过英雄不是这么好当的。这个可怜的娃被魔王抓住了,倍受折磨,生死一线。有一天魔王出去约会了,这可是一个千载难逢的逃命机会。你现在的任务就是判断一下这个英雄未遂的孩子能不能在魔王回来之前逃出魔王的城堡,成功逃生,最后迎娶我们美丽的公主。
魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的矩阵,刚开始hck被关在(0,0,0)的位置,离开城堡的门在(A-1,B-1,C-1)的位置,现在知道魔王将在T分钟后回到城堡,hck每分钟能从一个坐标走到相邻的六个坐标中的其中一个.现在给你城堡的地图,请你计算出hck能否在魔王回来前离开城堡(只要走到出口就算离开城堡,如果走到出口的时候魔王刚好回来也算逃亡成功),如果可以请输出需要多少分钟才能离开,如果不能则输出-1.
如图所示,输入数据中的第0块的最左上角是hck被关的地方,第A-1块的最右下角是城堡的出口。按照图中红色箭头方向移动每一层以构成整个城堡。
2 3 2 2 10 0 1 0 0 1 1 1 0 0 0 0 1 3 3 4 20 0 1 1 1 0 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 0 0 0 0 1 1 0 0 1 1 0
-1 11
简单的3维广搜
代码:
#include <stdio.h> #include <string.h> #include <queue> #include <algorithm> using namespace std; #define M 55 struct node{ int x, y, z; int step; }; node st, en; int map[M][M][M]; bool vis[M][M][M]; int a, b, c, t; const int dx[] = {0, 0, 0, 0, 1, -1}; const int dy[] = {0, 0, 1, -1, 0, 0}; const int dz[] = {1, -1, 0, 0, 0, 0}; int limit(node s){ return (s.x>=0&&s.x<a&&s.y>=0&&s.y<b&&s.z>=0&&s.z<c&&map[s.x][s.y][s.z] == 0); } int match(node a, node b){ return (a.x==b.x&&a.y==b.y&&a.z==b.z); } int bfs(){ queue<node> q; int i, res = 0x3f3f3f3f; vis[0][0][0] = 1; q.push(st); while(!q.empty()){ node cur = q.front(); q.pop(); for(i = 0; i < 6; i ++){ node temp = cur; temp.x += dx[i]; temp.y+=dy[i]; temp.z += dz[i]; temp.step++; if(match(temp, en)){ res = min(res, temp.step); continue; } if(limit(temp)&&!vis[temp.x][temp.y][temp.z]){ q.push(temp); vis[temp.x][temp.y][temp.z] = 1; } } } if(res > t) return -1; return res; } int main(){ int T; scanf("%d", &T); while(T --){ scanf("%d%d%d%d", &a, &b, &c, &t); memset(vis, 0, sizeof(vis)); memset(map, -1, sizeof(map)); st.x = st.y = st.z = st.step = 0; en.x = a-1, en.y = b-1, en.z = c-1; int i, j, k; for(i = 0; i < a; i ++) for(j = 0; j < b; j ++) for(k = 0; k < c; k ++) scanf("%d", &map[i][j][k]); if(match(st, en)){ printf("0\n"); continue; } if(map[a-1][b-1][c-1] == 1){ printf("-1\n"); continue; } int ans = bfs(); printf("%d\n", ans); } return 0; }
标签:bfs
原文地址:http://blog.csdn.net/shengweisong/article/details/40260789