用Java写一个求海岛计数的算法
时间: 2024-02-27 08:58:37 浏览: 24
以下是用Java实现求海岛计数的算法示例代码:
```java
public class IslandCounter {
public static int countIslands(int[][] grid) {
int count = 0;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] == 1) {
count++;
dfs(grid, i, j);
}
}
}
return count;
}
private static void dfs(int[][] grid, int i, int j) {
if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] == 0) {
return;
}
grid[i][j] = 0;
dfs(grid, i - 1, j);
dfs(grid, i + 1, j);
dfs(grid, i, j - 1);
dfs(grid, i, j + 1);
}
public static void main(String[] args) {
int[][] grid = {
{1, 1, 0, 0, 0},
{1, 1, 0, 0, 0},
{0, 0, 1, 0, 0},
{0, 0, 0, 1, 1}
};
int count = countIslands(grid);
System.out.println("海岛数量为:" + count);
}
}
```
在上面的代码中,我们定义了一个countIslands()方法来计算二维数组中的海岛数量。该方法接受一个二维数组作为输入,其中1表示陆地,0表示海洋。我们使用两个for循环来遍历整个二维数组。对于每个值为1的格子,我们将其计数并使用深度优先搜索算法(dfs)来遍历所有与其相连的陆地,并将它们标记为0,表示已经被访问过。
在dfs()方法中,我们首先检查当前格子是否越界或者已经被访问过,如果是则直接返回。否则,我们将当前格子标记为0,并递归访问其上下左右四个相邻格子,继续执行相同的操作。
最后,我们返回计数器的值,即为海岛数量。
在示例代码中,我们定义了一个包含4个海岛的二维数组,并输出其海岛数量。输出结果为“海岛数量为:4”。