結果
問題 |
No.424 立体迷路
|
ユーザー |
![]() |
提出日時 | 2017-02-04 03:12:59 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 117 ms / 2,000 ms |
コード長 | 1,947 bytes |
コンパイル時間 | 1,910 ms |
コンパイル使用メモリ | 80,688 KB |
実行使用メモリ | 41,344 KB |
最終ジャッジ日時 | 2024-07-05 07:13:55 |
合計ジャッジ時間 | 5,434 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 21 |
ソースコード
import java.util.*; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int H = sc.nextInt(); int W = sc.nextInt(); int sx = sc.nextInt()-1; int sy = sc.nextInt()-1; int gx = sc.nextInt()-1; int gy = sc.nextInt()-1; int [][] Hight = new int [H][W]; int [][] dist = new int [H][W]; for(int i=0; i<H; i++){ String tmp = sc.next(); for(int j=0; j<W; j++){ Hight[i][j] = tmp.charAt(j)-'0'; dist[i][j] = -1; } } Queue<Integer> q = new LinkedList<>(); int [] dx = {1,0,-1,0}; int [] dy = {0,1,0,-1}; q.add(sx); q.add(sy); dist[sx][sy]=0; while(!q.isEmpty()){ int x = q.poll(); int y = q.poll(); if(x==gx&&y==gy){ System.out.println("YES"); //print(H,W,dist); return; } for(int k=1; k<=2; k++){ for(int i=0; i<4; i++){ int nx = x+k*dx[i]; int ny = y+k*dy[i]; if(nx<0||ny<0||nx>=H||ny>=W)continue; if(dist[nx][ny]!=-1)continue; if( (k==1&&Math.abs(Hight[nx][ny]-Hight[x][y])<=1)|| (k==2&&(Hight[nx][ny]-Hight[x][y])==0&&Hight[nx][ny]>Hight[(nx+x)/2][(ny+y)/2]) ){ dist[nx][ny]=dist[x][y]+1; q.add(nx); q.add(ny); } } } } //print(H,W,dist); System.out.println("NO"); } static void print(int H, int W, int[][]A){ for(int i=0; i<H; i++){ for(int j=0; j<W; j++){ System.out.print(A[i][j]+" "); } System.out.println(); } } }