给一个01矩阵,求不同的岛屿的个数。
0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
在矩阵:
[
[1, 1, 0, 0, 0],
[0, 1, 0, 0, 1],
[0, 0, 0, 1, 1],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 1]
]
中有 3 个岛.
思路: 递归解决
package wangyiTest;
import java.awt.Checkbox;
public class DaoYu {
/**
* @param args
*/
static boolean[][] visit;
public static void main(String[] args) {
boolean[][] grid={};
System.out.println(numIslands(grid));
}
public static int numIslands(boolean[][] grid) {
if(grid.length>0)
{
System.out.println();
int count = 0;
int row = grid.length;
int column = grid[0].length;
visit = new boolean[row][column];
for(int i=0;i<row;i++)
{
for(int j=0;j<column;j++)
{
if(!visit[i][j])
{
if(grid[i][j])
{
visit[i][j]=true;
count ++;
Check(grid,i,j+1);
Check(grid, i,j-1);
Check(grid, i-1, j);
Check(grid,i+1,j);
}
}
}
}
return count;
}
return 0;
}
public static void Check(boolean[][] grid, int i, int j){
if(i>=0 && i<=grid.length-1 && j>=0 && j<=grid[0].length-1)
{
if(!visit[i][j] && grid[i][j])
{
visit[i][j]=true;
Check(grid,i,j+1);
Check(grid, i,j-1);
Check(grid, i-1, j);
Check(grid,i+1,j);
}
}
}
}