题目:用一个N*N的矩阵来表示一张地图,其中0位海洋,1位陆地。被0保围起来的所有1组成岛屿。试计算矩阵中岛屿的数量。
示例:
1 0 0 0 1 1 0 0
1 1 0 1 0 0 1 0
1 1 1 1 0 0 1 1
0 0 0 1 0 0 1 0
输出:3
分析:以每一元素作为起点进行一次深度优先遍历,将所遇到的1全部标记为0,无法进行下去时,计数器加一,代表搜索完一座岛屿,依次类推。
JAVA:
public int numIslands(char[][] grid) {
if (grid != null) {
int count = 0;
for (int i = 0; i < ; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] == '1') {
measureIsland(grid, i, j);
count++;
}
}
}
return count;
}
return 0;
}
private void measureIsland(char[][] grid, int i, int j) {
if (grid[i][j] != '0') {
grid[i][j] = '0';
if (i != 0)
measureIsland(grid, i - 1, j);
if (j != 0)
measureIsland(grid, i, j - 1);
if (i != - 1)
measureIsland(grid, i + 1, j);
if (j != grid[0].length - 1)
measureIsland(grid, i, j + 1);
}
}