package main import ( "bufio" "fmt" "os" ) func main() { var n int fmt.Scanf("%d", &n) var k = make([][]byte, n) var visit = make([][]bool, n) scanner := bufio.NewScanner(os.Stdin) for i:=0;i<n;i++{ k[i]= make([]byte, n) visit[i]=make([]bool,n) scanner.Scan() // 读取一整行 line := scanner.Text() for j:=0;j<n;j++{ k[i][j] = line[j] // 直接fmt.Scanf("%c", &k[i][j])需注意避开行末的换行符 } } var result int =0 var submerge bool dist := [][]int{{0,1},{0,-1},{1,0},{-1,0}} var dfs func(i, j int) dfs = func(i, j int){ // 遍历过程中如果不存在四边都是空地的,该区域会被淹没 if submerge { var f1,f2,f3,f4 bool = true, true, true, true if i-1 >=0 { if k[i-1][j] !='#'{ f1 = false } } if i+1 <n { if k[i+1][j] !='#'{ f2 = false } } if j-1 >=0 { if k[i][j-1] !='#'{ f3 = false } } if j+1 <n { if k[i][j+1] !='#'{ f4 = false } } if f1 && f2 && f3 && f4 { submerge = false } } for _,v:=range dist{ ni := i+v[0] nj := j+v[1] if ni<0|| ni>=n||nj<0||nj>=n || visit[ni][nj] || k[ni][nj] == '.'{ continue } visit[ni][nj] = true dfs(ni,nj) } } for i:=0;i<n;i++{ for j:=0;j<n;j++{ if visit[i][j] == false && k[i][j]=='#' { submerge = true // 先假设该联通分量区域会被全部淹没 visit[i][j] =true dfs(i,j) if submerge { result++ } } } } fmt.Println(result) }