岛屿的个数
题目
给一个01矩阵,求不同的岛屿的个数。
0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。样例
在矩阵:
中有 3 个岛.题解
对某个位置值是1 的时候是岛屿,将该位置设为 0 ,并将四周的 1 设置为 0。当是0的时候则继续遍历。
public class Solution {
/**
* @param grid a boolean 2D matrix
* @return an integer
*/
static int[] dx = {1, 0, 0, -1};
static int[] dy = {0, 1, -1, 0};
private int n, m;
private void removeIsland(boolean[][] grid, int x, int y) {
grid[x][y] = false;
for (int i = 0; i < 4; i++)
{
int nextX = x + dx[i];
int nextY = y + dy[i];
if (nextX >= 0 && nextX < n && nextY >= 0 && nextY < m)
{
if (grid[nextX][nextY])
{
removeIsland(grid, nextX, nextY);
}
}
}
}
public int numIslands(boolean[][] grid) {
n = grid.length;
if (n == 0)
{
return 0;
}
m = grid[0].length;
if (m == 0)
{
return 0;
}
int count = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
if (grid[i][j])
{
removeIsland(grid, i, j);
count++;
}
}
}
return count;
}
}
Last Update 2016.9.17