結果
問題 | No.157 2つの空洞 |
ユーザー | yuki2006 |
提出日時 | 2015-02-26 19:32:40 |
言語 | PyPy2 (7.3.15) |
結果 |
AC
|
実行時間 | 130 ms / 2,000 ms |
コード長 | 1,469 bytes |
コンパイル時間 | 151 ms |
コンパイル使用メモリ | 76,732 KB |
実行使用メモリ | 79,136 KB |
最終ジャッジ日時 | 2024-06-23 23:49:51 |
合計ジャッジ時間 | 3,162 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 16 |
ソースコード
import sys W, H = map(int, raw_input().split()) C = ["" for _ in xrange(H)] matrix = [[0 for i in xrange(W)] for i in xrange(H)] # close range def range_check(i, mn, mx): return mn <= i < mx def euclidean_distance(x, y, length): return abs(x) + abs(y) <= length def dfs(C, matrix, x, y, current): mn = H * W if C[y][x] == "#" or matrix[y][x] != 0: return 0 matrix[y][x] = current for i in xrange(-1, 2): for j in xrange(-1, 2): if i == 0 and j == 0: continue if not (range_check(x + i, 0, W) and range_check(y + j, 0, H)): continue if not euclidean_distance(i, j, 1): continue result = dfs(C, matrix, x + i, y + j, current) mn = min(result, mn) return mn for i in xrange(H): C[i] = raw_input() current = 1 for i in xrange(H): for j in xrange(W): if C[i][j] == "." and matrix[i][j] == 0: dfs(C, matrix, j, i, current) current += 1 mn = W * H for j1 in xrange(H): for i1 in xrange(W): for j2 in xrange(H): for i2 in xrange(W): if i1 == i2 and j1 == j2: continue if C[j1][i1] == "#" or C[j2][i2] == "#": continue if matrix[j1][i1] == matrix[j2][i2]: continue mn = min(mn, abs(i1 - i2) + abs(j1 - j2) - 1) print mn