結果

問題 No.424 立体迷路
ユーザー ikdikd
提出日時 2016-09-23 01:44:15
言語 C++11
(gcc 11.4.0)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 1,103 bytes
コンパイル時間 427 ms
コンパイル使用メモリ 61,940 KB
実行使用メモリ 4,384 KB
最終ジャッジ日時 2023-09-18 16:52:37
合計ジャッジ時間 1,417 ms
ジャッジサーバーID
(参考情報)
judge14 / judge12
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
4,384 KB
testcase_01 AC 2 ms
4,380 KB
testcase_02 AC 2 ms
4,380 KB
testcase_03 AC 1 ms
4,376 KB
testcase_04 AC 1 ms
4,380 KB
testcase_05 AC 2 ms
4,376 KB
testcase_06 AC 2 ms
4,380 KB
testcase_07 AC 1 ms
4,380 KB
testcase_08 AC 1 ms
4,380 KB
testcase_09 AC 2 ms
4,376 KB
testcase_10 AC 2 ms
4,376 KB
testcase_11 AC 2 ms
4,380 KB
testcase_12 AC 1 ms
4,376 KB
testcase_13 AC 2 ms
4,384 KB
testcase_14 AC 2 ms
4,380 KB
testcase_15 AC 2 ms
4,380 KB
testcase_16 AC 2 ms
4,376 KB
testcase_17 AC 2 ms
4,380 KB
testcase_18 AC 2 ms
4,376 KB
testcase_19 AC 2 ms
4,376 KB
testcase_20 AC 1 ms
4,380 KB
testcase_21 AC 2 ms
4,380 KB
testcase_22 AC 1 ms
4,380 KB
testcase_23 AC 2 ms
4,380 KB
testcase_24 AC 2 ms
4,380 KB
testcase_25 AC 2 ms
4,380 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

#include<iostream>
#include<queue>

using namespace std;
typedef pair<int, int> pii;
int h, w, sx, sy, gx ,gy;
int fld[50][50];
int reached[50][50];
pii dd[]={{1, 0}, {-1, 0}, {0, 1}, {0, -1}};

int abs(int a, int b){
   return max(a-b, b-a);
}

void dfs(int pi, int pj, int i, int j){

   if(!(0<=i&&i<h&&0<=j&&j<w)) return;
   if(reached[i][j]) return;
   int ph, H;
   ph=fld[pi][pj];
   H=fld[i][j];
   int mv=abs(pi, i)+abs(pj, j);
   if(mv==2){
      if(ph!=H) return;
      int mh=fld[(pi+i)/2][(pj+j)/2];
      if(mh>=ph) return;
   }else if(mv==1){
      if(abs(ph, H)>1) return;
   }

   reached[i][j]=1;

   for(pii d: dd){
      int ni, nj;
      ni=i+d.first;
      nj=j+d.second;
      dfs(i, j, ni, nj);
      dfs(i, j, ni+d.first, nj+d.second);
   }
}

int main(){

   cin>> h>> w>> sx>> sy>> gx>> gy;
   sx--; sy--; gx--; gy--;
   string b[h];
   for(int i=0; i<h; i++){
      cin>> b[i];
   }
   for(int i=0; i<h; i++){
      for(int j=0; j<w; j++){
         fld[i][j]=b[i][j]-'0';
      }
   }

   dfs(sx, sy, sx, sy);

   cout<< (reached[gx][gy]?"YES":"NO") << endl;

   return 0;
}
0