岛屿的个数
2016-05-31 18:05
281 查看
给一个01矩阵,求不同的岛屿的个数。0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛。我们只考虑上下左右为相邻。
样例
在矩阵:
中有
public class Solution {
/**
* @param grid a boolean 2D matrix
* @return an integer
*/
public int numIslands(boolean[][] grid) {
// Write your code here
//不要忘记判断数组是否为空
int row = grid.length;
//因为直接给数组赋值{},并不是null所以不能用grid==null来判断是否为空
if (row == 0 ){
return 0;
}
//当为空数组时 col赋值会报错 数组越界
int col = grid[0].length;
int count = 0;
/*或者设置一个数组 标记该位置是否判断过 节省时间
boolean[][] visited = new boolean[row][col];
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
visited[i][j] = false;
}
}*/
//采用递归 深度搜索 搜索之后的位置重置为0
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
if (grid[i][j]){
count += 1;
dfs(grid, i, j);
}
}
}
return count;
}
public void dfs(boolean[][] grid, int x, int y){
if (x < 0 || y < 0 || x >= grid.length || y >= grid[0].length || !grid[x][y]){
return ;
}
// if (visited[x][y]){
// return ;
// }
grid[x][y] = false;//访问过得位置置为0 节省时间
dfs(grid, x - 1, y);
dfs(grid, x + 1, y);
dfs(grid, x, y - 1);
dfs(grid, x, y + 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个岛.【借鉴网上代码整理得】
public class Solution {
/**
* @param grid a boolean 2D matrix
* @return an integer
*/
public int numIslands(boolean[][] grid) {
// Write your code here
//不要忘记判断数组是否为空
int row = grid.length;
//因为直接给数组赋值{},并不是null所以不能用grid==null来判断是否为空
if (row == 0 ){
return 0;
}
//当为空数组时 col赋值会报错 数组越界
int col = grid[0].length;
int count = 0;
/*或者设置一个数组 标记该位置是否判断过 节省时间
boolean[][] visited = new boolean[row][col];
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
visited[i][j] = false;
}
}*/
//采用递归 深度搜索 搜索之后的位置重置为0
for (int i = 0; i < row; i++){
for (int j = 0; j < col; j++){
if (grid[i][j]){
count += 1;
dfs(grid, i, j);
}
}
}
return count;
}
public void dfs(boolean[][] grid, int x, int y){
if (x < 0 || y < 0 || x >= grid.length || y >= grid[0].length || !grid[x][y]){
return ;
}
// if (visited[x][y]){
// return ;
// }
grid[x][y] = false;//访问过得位置置为0 节省时间
dfs(grid, x - 1, y);
dfs(grid, x + 1, y);
dfs(grid, x, y - 1);
dfs(grid, x, y + 1);
}
}
相关文章推荐
- 第10周 C语言程序设计(新2版) 3.5例题 函数atoi(s),将字符串转换为对应数值
- L3-004. 肿瘤诊断
- String 转换成JSONObject
- log4j:WARN No appenders could be found for logger (org.quartz.simpl.SimpleThreadPool)
- 【简介】利用Arduino和Coolpy设计网关 —— HTTP协议
- token是为了防止表单重复提交
- hdu 1245 Saving James Bond【floyd】
- 一个简单的词法分析器
- #pragma pack(push,1)与#pragma pack(1)的区别
- iOS的事件传递响应链
- Android第三方推送(基于JPush极光)
- 深入浅出Mybatis系列(五)---TypeHandler简介及配置(mybatis源码篇)
- 【Linux运维入门】PSSH-轻量集群管理工具
- Android的ArrayAdapter
- Oracle EXP-00091解决方法
- 第14周实践项目1——排序函数模板
- 横、竖分割线
- hdu2648 shopping(map应用)
- docker 通过Dockerfile build image
- Fragment基本应用