题解 | 没挡住洪水

没挡住洪水

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)
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务