题解 | 挡住洪水

挡住洪水

https://www.nowcoder.com/practice/56e54f4c2e3c4a58abfe76dbc1da1d7e

package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	buf := bufio.NewReader(os.Stdin)
	var n, m int
	fmt.Fscan(buf, &n, &m)
	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, m)
	}

	type p struct {
		x, y int
	}
	total := 0
	for i := 0; i < n; i++ {
		for j := 0; j < m; j++ {
			if !visited[i][j] && sli[i][j] == '0' {
				pos := []p{{i, j}}
				visited[i][j] = true
                count:=0
                isSide := false
				for len(pos) > 0 {
                    count++
					c := pos[0]
					pos = pos[1:]
					if c.x == 0 || c.y == 0 || c.x == n-1 || c.y == m-1 {
						isSide = true
					}
					for k := 0; k < 4; k++ {
						nx, ny := c.x+addx[k], c.y+addy[k]
						if nx >= 0 && ny >= 0 && nx < n && ny < m && !visited[nx][ny] && sli[nx][ny] == '0' {
							visited[nx][ny] = true
							pos = append(pos, p{nx, ny})
						}
					}
				}
                if !isSide{
                    total+=count
                }
			}
		}
	}
	fmt.Print(total)
}

全部评论

相关推荐

03-12 12:33
嘉应学院 Python
堆肥大王:认可你的做法,但无产阶级的兄弟们也希望你能过的更好
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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