题目:http://acm.hdu.edu.cn/showproblem.php?pid=1253
题意: 迷宫问题, 三维数组, 数据范围较大, Bfs较优。 PS-----> 堕落了几天, 是时候奋斗了,fighting!!
//ac码:1669ms; #include <queue> #include <cstdio> #include <cstring> #include <iostream> using namespace std; int map[55][55][55]; int ac[6][3] = {0, 0, 1, 0, 0, -1, 0, 1, 0, 0, -1, 0, 1, 0, 0, -1, 0, 0}; struct Maze { int x, y, z, step; }r, s, t; int a, b, c, T; int Bfs(int x, int y, int z) { queue<Maze> Q; r.x = x; r.y = y; r.z = z; r.step = 0; Q.push(r); map[x][y][z] = 1; while(!Q.empty()) { s = Q.front(); Q.pop(); for(int i = 0; i < 6; i++) { t.x = s.x + ac[i][0]; t.y = s.y + ac[i][1]; t.z = s.z + ac[i][2]; t.step = s.step + 1; if(t.x >= 0 && t.x < a && t.y >= 0 && t.y < b && t.z >= 0 && t.z < c && map[t.x][t.y][t.z] == 0) { if(t.x == a - 1 && t.y == b - 1 && t.z == c - 1 && t.step <= T) return t.step; else { map[t.x][t.y][t.z] = 1; Q.push(t); } } } } return -1; } int main() { int k; scanf("%d", &k); while(k--) { 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++) //cin >> map[i][j][k]; scanf("%d", &map[i][j][k]); int ans = Bfs(0, 0, 0); printf("%d\n", ans); } return 0; }
时间: 2024-10-10 18:48:13