题目
题目描述
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
样例
输入1:
11110
11010
11000
00000
输出: 1
输入:
11000
11000
00100
00011
输出: 3
题解
dfs:
简单搜索题,对地图进行遍历找到第一个'1' count++ 并且重新赋值为'0'对其进行向四个方向搜索对搜索的点判断是否在地图内并且是'1',然后赋值为'0' 继续对其四个方向遍历 重复上述操作,直到找不到'1',对于第一层遍历找到一个'1' 就 count++ 最后输入 count
并查集:
代码
dfs:
fun dfs(i: Int, j: Int) {
if (i < mapp.size && i >= 0 && j >= 0 && j < mapp[i].size && mapp[i][j] == '1') {
mapp[i][j] = '0'
dfs(i - 1, j)
dfs(i + 1, j)
dfs(i, j - 1)
dfs(i, j + 1)
}
}
lateinit var mapp: Array<CharArray>
fun numIslands(grid: Array<CharArray>): Int {
var count = 0
mapp = grid
for (i in mapp.indices) {
for (j in mapp[i].indices) {
if (mapp[i][j] == '1') {
mapp[i][j] = '0'
count++
dfs(i - 1, j)
dfs(i + 1, j)
dfs(i, j - 1)
dfs(i, j + 1)
}
}
}
return count
}
网友评论