結果
問題 | No.424 立体迷路 |
ユーザー | face4 |
提出日時 | 2018-08-08 21:03:44 |
言語 | C++14 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 3 ms / 2,000 ms |
コード長 | 1,740 bytes |
コンパイル時間 | 668 ms |
コンパイル使用メモリ | 74,624 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-05 07:16:49 |
合計ジャッジ時間 | 1,504 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
5,248 KB |
testcase_01 | AC | 1 ms
5,376 KB |
testcase_02 | AC | 2 ms
5,376 KB |
testcase_03 | AC | 2 ms
5,376 KB |
testcase_04 | AC | 2 ms
5,376 KB |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | AC | 2 ms
5,376 KB |
testcase_07 | AC | 2 ms
5,376 KB |
testcase_08 | AC | 2 ms
5,376 KB |
testcase_09 | AC | 2 ms
5,376 KB |
testcase_10 | AC | 2 ms
5,376 KB |
testcase_11 | AC | 2 ms
5,376 KB |
testcase_12 | AC | 2 ms
5,376 KB |
testcase_13 | AC | 2 ms
5,376 KB |
testcase_14 | AC | 2 ms
5,376 KB |
testcase_15 | AC | 1 ms
5,376 KB |
testcase_16 | AC | 2 ms
5,376 KB |
testcase_17 | AC | 2 ms
5,376 KB |
testcase_18 | AC | 2 ms
5,376 KB |
testcase_19 | AC | 2 ms
5,376 KB |
testcase_20 | AC | 2 ms
5,376 KB |
testcase_21 | AC | 2 ms
5,376 KB |
testcase_22 | AC | 2 ms
5,376 KB |
testcase_23 | AC | 3 ms
5,376 KB |
testcase_24 | AC | 2 ms
5,376 KB |
testcase_25 | AC | 2 ms
5,376 KB |
ソースコード
#include<iostream> #include<stack> using namespace std; int main(){ int h, w, sx, sy, gx, gy; cin >> h >> w >> sx >> sy >> gx >> gy; // convert 1-origin to 0-origin sx--; sy--; gx--; gy--; int G[h][w]; for(int i = 0; i < h; i++){ for(int j = 0; j < w; j++){ G[i][j] = 0; } } bool visit[h][w]; for(int i = 0; i < h; i++){ for(int j = 0; j < w; j++){ visit[i][j] = false; } } string t; for(int i = 0; i < h; i++){ cin >> t; for(int j = 0; j < w; j++){ G[i][j] = t[j]-'0'; } } // bfs visit[sx][sy] = true; stack<pair<int,int>> s; s.push({sx,sy}); while(!s.empty()){ pair<int,int> p = s.top(); s.pop(); int x = p.first; int y = p.second; int z = G[x][y]; visit[x][y] = true; if(x > 1 && !visit[x-2][y] && z > G[x-1][y] && z == G[x-2][y]) s.push({x-2,y}); if(x < h-2 && !visit[x+2][y] && z > G[x+1][y] && z == G[x+2][y]) s.push({x+2,y}); if(y > 1 && !visit[x][y-2] && z > G[x][y-1] && z == G[x][y-2]) s.push({x,y-2}); if(y < w-2 && !visit[x][y+2] && z > G[x][y+1] && z == G[x][y+2]) s.push({x,y+2}); if(x > 0 && !visit[x-1][y] && abs(G[x][y]-G[x-1][y]) <= 1) s.push({x-1,y}); if(x < h-1 && !visit[x+1][y] && abs(G[x][y]-G[x+1][y]) <= 1) s.push({x+1,y}); if(y > 0 && !visit[x][y-1] && abs(G[x][y]-G[x][y-1]) <= 1) s.push({x,y-1}); if(y < w-1 && !visit[x][y+1] && abs(G[x][y]-G[x][y+1]) <= 1) s.push({x,y+1}); } if(visit[gx][gy]) cout << "YES" << endl; else cout << "NO" << endl; return 0; }