hdu 2102 A计划 伪3D迷宫
来源:互联网 发布:mac网盘下载速度慢 编辑:程序博客网 时间:2024/05/11 23:21
题意:
给一个2 * n * m的迷宫,给起点,找终点。
问能否在规定时间内找到。
解析:
bfs,z维直接用 ^1 来处理。
代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <cstring>#include <cmath>#include <stack>#include <vector>#include <queue>#include <map>#include <climits>#include <cassert>#define LL long long#define lson lo, mi, rt << 1#define rson mi + 1, hi, rt << 1 | 1using namespace std;const int maxn = 20;const int inf = 0x3f3f3f3f;const double eps = 1e-8;const double pi = acos(-1.0);const double ee = exp(1.0);int dir[][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};int n, m, t;char g[maxn][maxn][5];int sx, sy, sz, ex, ey, ez;int step[maxn][maxn][5];struct Node{ int x, y, z; Node(int _x, int _y, int _z) { x = _x; y = _y; z = _z; }};int bfs(){ memset(step, -1, sizeof(step)); queue<Node> q; step[sx][sy][sz] = 0; q.push(Node(sx, sy, sz)); while (!q.empty()) { Node now = q.front(); q.pop(); int x = now.x; int y = now.y; int z = now.z; if (x == ex && y == ey && z == ez) { return step[x][y][z]; } for (int i = 0; i < 4; i++) { int nx = x + dir[i][0]; int ny = y + dir[i][1]; int nz = z ^ 1; if (0 <= nx && nx < n && 0 <= ny && ny < m && g[nx][ny][z] != '*') { if (g[nx][ny][z] == '#') { if (g[nx][ny][nz] != '#' && g[nx][ny][nz] != '*')/// { if (step[nx][ny][nz] == -1) { step[nx][ny][nz] = step[x][y][z] + 1; q.push(Node(nx, ny, nz)); } } } else { if (step[nx][ny][z] == -1) { step[nx][ny][z] = step[x][y][z] + 1; q.push(Node(nx, ny, z)); } } } } } return -1;}int main(){#ifdef LOCAL freopen("in.txt", "r", stdin);#endif // LOCAL int ncase; scanf("%d", &ncase); while (ncase--) { scanf("%d%d%d", &n, &m, &t); getchar(); for (int z = 0; z < 2; z++) { for (int x = 0; x < n; x++) { for (int y = 0; y < m; y++) { scanf("%c", &g[x][y][z]); if (g[x][y][z] == 'S') { sx = x; sy = y; sz = z; } if (g[x][y][z] == 'P') { ex = x; ey = y; ez = z; } } getchar(); } getchar(); } int ans = bfs(); if (ans == -1) { printf("NO\n"); } else { cout << ans << endl; if (ans <= t) printf("YES\n"); else printf("NO\n"); } } return 0;}
0 0
- hdu 2102 A计划 伪3D迷宫
- hdu 2102A计划(搜索,两层迷宫)
- HDU 2102 A计划 (三维的迷宫BFS)
- hdu 2102 A计划
- HDU-2102-A计划
- HDU 2102 A计划
- HDU 2102 A计划
- HDU 2102 A计划
- hdu 2102 A计划
- hdu 2102 A计划
- hdu 2102 A计划
- hdu 2102 A计划
- hdu(2102) A计划
- hdu 2102 A计划
- HDU 2102 A计划
- HDU 2102 A计划
- HDU 2102 A计划
- HDU 2102A计划
- HDU 5239 Doom(线段树)
- No resource found that matches the given name 'Theme.AppCompat.Light.DarkActionBar'
- 2-12-1 教师兼干部类
- block 实现原理详解
- XML小练习:根据XML写出Schema(简单)
- hdu 2102 A计划 伪3D迷宫
- IoC(控制反转)的主要组件和注入的两种方式
- Step into Scala - 32 - Test
- 《C++Primer》读书笔记--类模板
- Java单元测试(Junit+Mock+代码覆盖率)
- XML小练习:利用DOM解析XML(初级,实用性不强)
- css相关问题(一)
- 黑马程序员----反射
- MRC环境下block内存泄漏问题