結果
問題 | No.424 立体迷路 |
ユーザー |
![]() |
提出日時 | 2016-09-22 23:11:20 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 1,654 bytes |
コンパイル時間 | 1,128 ms |
コンパイル使用メモリ | 163,820 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-05 07:06:06 |
合計ジャッジ時間 | 1,804 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 21 |
ソースコード
#include <bits/stdc++.h>#define rep(i, a, n) for(int i = a; i < n; i++)#define repb(i, a, b) for(int i = a; i >= b; i--)#define all(a) a.begin(), a.end()#define int long longusing namespace std;typedef pair<int, int> P;int h, w;int sy, sx, gy, gx;int dy[4] = {1, -1, 0, 0};int dx[4] = {0, 0, 1, -1};int hy[4] = {2, -2, 0, 0};int hx[4] = {0, 0, 2, -2};char c[51][51];bool f[51][51];bool contain(int y, int x){return (0 <= y && y < h && 0 <= x && x < w);}signed main(){cin >> h >> w;cin >> sy >> sx >> gy >> gx;sy--; sx--; gy--; gx--;rep(i, 0, h){rep(j, 0, w){cin >> c[i][j];f[i][j] = false;}}queue<P> q;f[sy][sx] = true;q.push(P(sy, sx));while(q.size()){P p = q.front(); q.pop();int y = p.first, x = p.second;if(y == gy && x == gx) break;rep(i, 0, 4){int ny = y + dy[i];int nx = x + dx[i];if(contain(ny, nx) && f[ny][nx] == false){if(abs(c[y][x] - c[ny][nx]) <= 1){f[ny][nx] = true;q.push(P(ny, nx));}}}rep(i, 0, 4){int ny = y + hy[i];int nx = x + hx[i];int ty = y + dy[i];int tx = x + dx[i];if(contain(ny, nx) && f[ny][nx] == false){if(c[y][x] == c[ny][nx] && c[ty][tx] < c[y][x]){f[ny][nx] = true;q.push(P(ny, nx));}}}}cout << (f[gy][gx] ? "YES" : "NO") << endl;}