結果
| 問題 |
No.157 2つの空洞
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-08-25 16:59:15 |
| 言語 | Java (openjdk 23) |
| 結果 |
AC
|
| 実行時間 | 158 ms / 2,000 ms |
| コード長 | 1,259 bytes |
| コンパイル時間 | 3,469 ms |
| コンパイル使用メモリ | 77,604 KB |
| 実行使用メモリ | 41,388 KB |
| 最終ジャッジ日時 | 2024-11-08 02:22:49 |
| 合計ジャッジ時間 | 6,944 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 16 |
ソースコード
package No100番台;
import java.util.Scanner;
public class Q157 {
public static void main(String[] args) throws Exception {
new Q157().solve();
}
int[] dx = { 1, -1, 0, 0 };
int[] dy = { 0, 0, 1, -1 };
void dfs(char[][] map, int i, int j, char x) {
map[i][j] = x;
for (int k = 0; k < 4; k++) {
if (map[i + dy[k]][j + dx[k]] == '.')
dfs(map, i + dy[k], j + dx[k], x);
}
}
void solve() {
Scanner sc = new Scanner(System.in);
int w = sc.nextInt();
int h = sc.nextInt();
char[][] map = new char[h][w];
for (int i = 0; i < h; i++) {
map[i] = sc.next().toCharArray();
}
bi: for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (map[i][j] == '.') {
dfs(map, i, j, '1');
break bi;
}
}
}
bi: for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (map[i][j] == '.') {
dfs(map, i, j, '2');
break bi;
}
}
}
int ans = 999999999;
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
if (map[i][j] == '1') {
for (int k = 0; k < h; k++) {
for (int l = 0; l < w; l++) {
if (map[k][l] == '2')
ans = Math.min(ans, Math.abs(i - k) + Math.abs(j - l));
}
}
}
}
}
System.out.println(ans - 1);
}
}