您的位置:首页 > 其它

岛屿问题

2016-03-27 16:07 211 查看
给一个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);
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: