岛屿问题
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 个岛.
思路: 递归解决
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); } } } }
相关文章推荐
- 实现VMware Workstation中的CentOS 6.6 上网的方法
- 第五周项目1(4)
- 第五周linux学习笔记
- 第1章关键角色及其职责——明确职责
- 命令passwd报错因inode节点处理记录
- hdu 2985 The k-th Largest Group 树状数组求第K大
- Tsinsen A1219. 采矿(陈许旻) (树链剖分,线段树 + DP)
- 揭开Spark Streaming神秘面纱② - ReceiverTracker 与数据导入
- Lua入门学习资料
- bootstrap modal 添加input Firefox报错
- java学习笔记之java如何快速入门
- 【转载】jdk、jre、jvm等名词解释
- 第5周-项目1-三角形类锥形(4)
- 《Linux内核设计与实现》第5章读书整理
- Memory Management
- C语言指针的指针作用(返回值)之二
- VMware workstation NAT方式无法连接外网
- samba permission configuration
- C++中map容器的使用
- mybatis连接mysql数据库插入中文乱码