標籤:
題目: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;}
杭電1253--勝利的大逃亡(Bfs)