結果
問題 |
No.424 立体迷路
|
ユーザー |
|
提出日時 | 2016-09-22 23:11:19 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,510 bytes |
コンパイル時間 | 3,162 ms |
コンパイル使用メモリ | 166,964 KB |
実行使用メモリ | 6,820 KB |
最終ジャッジ日時 | 2024-11-17 15:08:22 |
合計ジャッジ時間 | 2,571 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 19 WA * 2 |
ソースコード
#include <bits/stdc++.h> using namespace std; #define FOR(i,a,b) for(int i=a;i<b;i++) #define REP(i,b) FOR(i,0,b) #define INF 1e9 #define MAX_h 50 #define MAX_w 50 using ll = long long; const ll mod = LLONG_MAX; int dx[4]={1,0,-1,0}; int dy[4]={0,1,0,-1}; int ddx[4]={2,0,-2,0}; int ddy[4]={0,2,0,-2}; char field[51][51]; bool board[51][51]; int h,w; void mapo(){ cout<<endl; cout<<"--test--"<<endl; REP(i,h){ REP(j,w){ if(board[i][j]) cout<<"1"; else cout<<"0"; } cout<<endl; } } bool can_ladder(int x,int y,int nx,int ny){ if(abs((field[x][y]-'0')-(field[nx][ny]-'0'))<=1){ return true; }else{ return false; } } bool can_ladder2(int x,int y,int nx,int ny){ if(abs((field[x][y]-'0')-(field[nx][ny]-'0'))<1){ return true; }else{ return false; } } void dfs(int x,int y){ board[x][y]=true; REP(i,4){ int nx=x+dx[i]; int ny=y+dy[i]; if(nx>=0&&nx<h&&ny>=0&&ny<w && can_ladder(x,y,nx,ny) && !board[nx][ny]){ dfs(nx,ny); } int nnx=x+ddx[i]; int nny=y+ddy[i]; if(nnx>=0&&nnx<h&&nny>=0&&nny<w && can_ladder2(x,y,nnx,nny) && !board[nnx][nny]){ dfs(nnx,nny); } } return; } int main(){ cin>>h>>w; int sx,sy,gx,gy; cin>>sx>>sy>>gx>>gy; sx--;sy--;gx--;gy--; REP(i,h){ REP(j,w){ cin>>field[i][j]; board[i][j]=false; } } board[sx][sy]=true; dfs(sx,sy); if(board[gx][gy]==true){ cout<<"YES"<<endl; }else{ cout<<"NO"<<endl; } return 0; }