結果

問題 No.424 立体迷路
ユーザー ikdikd
提出日時 2016-09-23 01:12:53
言語 C++11
(gcc 11.4.0)
結果
WA  
実行時間 -
コード長 1,085 bytes
コンパイル時間 504 ms
コンパイル使用メモリ 63,492 KB
実行使用メモリ 6,944 KB
最終ジャッジ日時 2024-04-28 20:23:35
合計ジャッジ時間 1,382 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 1 ms
6,812 KB
testcase_01 AC 1 ms
6,940 KB
testcase_02 AC 2 ms
6,940 KB
testcase_03 AC 2 ms
6,944 KB
testcase_04 AC 1 ms
6,940 KB
testcase_05 AC 1 ms
6,944 KB
testcase_06 AC 2 ms
6,944 KB
testcase_07 AC 2 ms
6,944 KB
testcase_08 AC 1 ms
6,940 KB
testcase_09 AC 1 ms
6,940 KB
testcase_10 AC 1 ms
6,940 KB
testcase_11 AC 1 ms
6,944 KB
testcase_12 AC 2 ms
6,940 KB
testcase_13 AC 1 ms
6,940 KB
testcase_14 AC 2 ms
6,940 KB
testcase_15 WA -
testcase_16 AC 2 ms
6,940 KB
testcase_17 AC 1 ms
6,940 KB
testcase_18 AC 2 ms
6,940 KB
testcase_19 AC 2 ms
6,940 KB
testcase_20 AC 2 ms
6,940 KB
testcase_21 AC 1 ms
6,940 KB
testcase_22 WA -
testcase_23 AC 2 ms
6,940 KB
testcase_24 AC 2 ms
6,940 KB
testcase_25 AC 2 ms
6,940 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 dif=abs(fld[pi][pj], fld[i][j]);
   if(dif>=2) return;
   if(dif==0){
      int mv=abs(pi, i)+abs(pj, j);
      if(mv==2){
         int mh=fld[(pi+i)/2][(pj+j)/2];
         if(mh>=fld[pi][pj]) 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