给一个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
个岛.
解题思路:对于这种图论的题来说,(づ。◕‿‿◕。)づ宝宝真的是不会,所以我百度学习了一下。不看不知道,一看还是挺简单的,最简单的DFS
1 public class Solution { 2 /** 3 * @param grid a boolean 2D matrix 4 * @return an integer 5 */ 6 public void dfs(boolean[][] grid, int x , int y){ 7 if(x<0||x>grid.length-1){ 8 return; 9 } 10 if(y<0||y>grid[0].length-1){ 11 return; 12 } 13 if(!grid[x][y]){ 14 return; 15 } 16 grid[x][y]=false; 17 dfs(grid,x+1,y); 18 dfs(grid,x-1,y); 19 dfs(grid,x,y+1); 20 dfs(grid,x,y-1); 21 } 22 public int numIslands(boolean[][] grid) { 23 // Write your code here 24 if(grid.length ==0 || grid[0].length==0 || grid == null ) return 0; 25 int n=grid.length; 26 int m=grid[0].length; 27 int count=0; 28 for(int i=0;i<n;i++){ 29 for(int j=0;j<m;j++){ 30 if(grid[i][j]){ 31 dfs(grid,i,j); 32 count++; 33 } 34 } 35 } 36 return count; 37 } 38 }