岛屿的个数
题目链接:岛屿的个数
思路:
- 本题就是简单的连通图个数问题
- 只需要找出所有连通图的个数,当一个点为:1时,只需递归扩散到周围四个点,再额外定义一个visit数组记录遍历过的节点
- 当一个连通图遍历完全时,再继续寻找下一个连通图,进行计数
代码:
public int numIslands(char[][] grid) {
if(grid==null||grid.length==0) {
return 0;
}
int count = 0;
boolean[][] visit = new boolean[grid.length][grid[0].length];
for(int i=0;i<grid.length;i++) {
for(int j=0;j<grid[0].length;j++) {
if(grid[i][j]=='1'&&visit[i][j]==false) {
//调用递归
findIsland(grid,i,j,visit);
++count;
}
}
}
return count;
}
public void findIsland(char[][] grid,int i,int j,boolean[][] visit) {
visit[i][j] = true;
if(i-1>=0&&grid[i-1][j]=='1'&&visit[i-1][j]==false) {
findIsland(grid,i-1,j,visit);
}
if(i+1<grid.length&&grid[i+1][j]=='1'&&visit[i+1][j]==false) {
findIsland(grid,i+1,j,visit);
}
if(j-1>=0&&grid[i][j-1]=='1'&&visit[i][j-1]==false) {
findIsland(grid,i,j-1,visit);
}
if(j+1<grid[0].length&&grid[i][j+1]=='1'&&visit[i][j+1]==false) {
findIsland(grid,i,j+1,visit);
}
}