题解 | 没挡住洪水
没挡住洪水
https://www.nowcoder.com/practice/6d62436fda5f4ef997e68d1ce1dd6eb2
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
buf := bufio.NewReader(os.Stdin)
var n int
fmt.Fscan(buf, &n)
sli := make([]string, n)
for i := 0; i < n; i++ {
fmt.Fscan(buf, &sli[i])
}
addx := [4]int{0, 0, 1, -1}
addy := [4]int{1, -1, 0, 0}
visited := make([][]bool, n)
for i := range visited {
visited[i] = make([]bool, n)
}
type p struct {
x, y int
}
count := 0
for i := 0; i < n; i++ {
for j := 0; j < n; j++ {
if !visited[i][j] && sli[i][j] == '#' {
count++
pos := []p{{i, j}}
visited[i][j] = true
have := false
for len(pos) > 0 {
c := pos[0]
pos = pos[1:]
count := 0
for k := 0; k < 4; k++ {
nx, ny := c.x+addx[k], c.y+addy[k]
if nx >= 0 && ny >= 0 && nx < n && ny < n && !visited[nx][ny] && sli[nx][ny] == '#' {
visited[nx][ny] = true
pos = append(pos, p{nx, ny})
}
if nx >= 0 && ny >= 0 && nx < n && ny < n && sli[nx][ny] == '#' {
count++
}
}
if count == 4 {
have = true
}
}
if have {
count--
}
}
}
}
fmt.Print(count)
}
查看5道真题和解析