結果
| 問題 |
No.157 2つの空洞
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2016-03-03 18:50:11 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,299 bytes |
| コンパイル時間 | 11,602 ms |
| コンパイル使用メモリ | 236,036 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2024-10-10 23:28:25 |
| 合計ジャッジ時間 | 12,027 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 16 |
ソースコード
package main
import (
"bufio"
"fmt"
"os"
"strconv"
)
var sc = bufio.NewScanner(os.Stdin)
func main() {
sc.Split(bufio.ScanWords)
w, h := nextInt(), nextInt()
cave := make([][]byte, h)
for i := range cave {
cave[i] = []byte(nextLine())
}
var sPos [2]int
for j, l := range cave {
for i, b := range l {
if b == '.' {
sPos = [2]int{i, j}
cave[j][i] = 0
break
}
}
if sPos[0] != 0 && sPos[1] != 0 {
break
}
}
q := make([][2]int, 0, 400)
q = append(q, sPos)
move := [][2]int{{1, 0}, {-1, 0}, {0, 1}, {0, -1}}
for len(q) > 0 {
pos := q[0]
q = q[1:]
for _, m := range move {
nextI, nextJ := pos[0]+m[0], pos[1]+m[1]
if cave[nextJ][nextI] == '.' {
cave[nextJ][nextI] = 0
q = append(q, [2]int{nextI, nextJ})
}
}
}
for i := byte(0); i < 200; i++ {
for j, l := range cave[1 : h-1] {
for k, v := range l[1 : w-1] {
if v != i {
continue
}
for _, m := range move {
nextI, nextJ := k+1+m[0], j+1+m[1]
nextV := cave[nextJ][nextI]
if nextV == '.' {
fmt.Println(i)
return
}
if nextV == '#' {
cave[nextJ][nextI] = i + 1
}
}
}
}
}
}
func nextLine() string {
sc.Scan()
return sc.Text()
}
func nextInt() int {
i, _ := strconv.Atoi(nextLine())
return i
}