package main

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 判断岛屿数量
 * @param grid char字符型二维数组
 * @return int整型
 */
func solve(grid [][]byte) int {
	row := len(grid)
	col := len(grid[0])
	visited := make([][]bool, row)
    for i:=0;i<row;i++{
        visited[i]=make([]bool,col)
    }
	res := 0
	//广度优先遍历
	for i := 0; i < row; i++ {
		for j := 0; j < col; j++ {
			if grid[i][j] == '1' && visited[i][j] == false {
				//递归将附近的岛屿全部标记为true
                mark(grid, visited, i, j)
				//发现新大陆
				res++
			}
		}
	}
	return res

}

func mark(grid [][]byte, visited [][]bool, i, j int) {
	visited[i][j] = true
	//将四周的岛屿都标记为true
	if i +1<len(grid) && grid[i+1][j] == '1' && visited[i+1][j] == false {
		mark(grid, visited, i+1, j)
	}
    if i > 0 && grid[i-1][j] == '1' && visited[i-1][j] == false {
		mark(grid, visited, i-1, j)
	}
    if j +1< len(grid[0]) && grid[i][j+1] == '1' && visited[i][j+1] == false {
		mark(grid, visited, i, j+1)
	}
    if j != 0 && grid[i][j-1] == '1' && visited[i][j-1] == false {
		mark(grid, visited, i, j-1)
	}
}