結果
| 問題 |
No.157 2つの空洞
|
| コンテスト | |
| ユーザー |
uafr_cs
|
| 提出日時 | 2015-06-17 04:09:30 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 130 ms / 2,000 ms |
| コード長 | 1,885 bytes |
| コンパイル時間 | 2,492 ms |
| コンパイル使用メモリ | 79,396 KB |
| 実行使用メモリ | 54,300 KB |
| 最終ジャッジ日時 | 2024-07-07 03:28:52 |
| 合計ジャッジ時間 | 5,529 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 16 |
ソースコード
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.TreeSet;
public class Main {
public static final int INF = Integer.MAX_VALUE / 2 - 1;
public static final int[] vs = {1, 0, -1, 0};
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
final int W = sc.nextInt();
final int H = sc.nextInt();
boolean[][] is_wall = new boolean[H][W];
for(int i = 0; i < H; i++){
char[] inputs = sc.next().toCharArray();
for(int j = 0; j < W; j++){
is_wall[i][j] = inputs[j] == '#';
}
}
int sx = -1, sy = -1;
LOOP:
for(int i = 0; i < H; i++){
for(int j = 0; j < W; j++){
if(!is_wall[i][j]){
sx = j; sy = i;
break LOOP;
}
}
}
int[][] dists = new int[H][W];
for(int i = 0; i < H; i++){
for(int j = 0; j < W; j++){
dists[i][j] = INF;
}
}
dists[sy][sx] = 0;
LinkedList<Integer> y_queue = new LinkedList<Integer>();
LinkedList<Integer> x_queue = new LinkedList<Integer>();
y_queue.add(sy);
x_queue.add(sx);
while(!y_queue.isEmpty()){
final int y = y_queue.poll();
final int x = x_queue.poll();
if(dists[y][x] != 0 && !is_wall[y][x]){
System.out.println(dists[y][x]);
break;
}
for(int v = 0; v < vs.length; v++){
final int nx = x + vs[v];
final int ny = y + vs[(v + 1) % vs.length];
if(nx < 0 || nx >= W || ny < 0 || ny >= H){
continue;
}
if(is_wall[ny][nx] && dists[ny][nx] > dists[y][x] + 1){
dists[ny][nx] = Math.min(dists[ny][nx], dists[y][x] + 1);
y_queue.addLast(ny);
x_queue.addLast(nx);
}
if(!is_wall[ny][nx] && dists[ny][nx] > dists[y][x]){
dists[ny][nx] = Math.min(dists[ny][nx], dists[y][x]);
y_queue.addFirst(ny);
x_queue.addFirst(nx);
}
}
}
}
}
uafr_cs