letcode 200 岛屿数量(改)

题目

给定一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围, 并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。

思路

思路来源:https://blog.csdn.net/lv1224/article/details/82470100
DFS 算法
感谢大佬~!

大致说明下:
第一步 将 第一个 值为1 的点 及其周围 为 1 的点 的值都置为 2
这代表 该 岛屿 个所有节点 都被遍历 过了
第二步 遍历整个二维数组即可 ,注意 每做完一次 第一步 都代表已经遍历过了 一整个岛屿

解答(加入计算最大岛屿数目的实现)

/**
 * 
 */

/***
 * @author 18071
 * @Date 2019年3月6日
 * letcode 200
 * 功能:给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,
 * 计算岛屿的数量。一个岛被水包围,
 * 并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。
 ***/
public class test {
	 public static void main(String args []) {
		 Solution s=new Solution ();
		 int [][] x = {{1,1,1,0 },{1,1,0,1},{0,0,1,1 },{1,1,0,0}};
		 System.out.println(s.numIslands(x));
	 }

}

class Solution {
	
	public int  setone(int [][] grid ,int row ,int colum) {
		if(row >= grid.length||colum>= grid[0].length|| row < 0|| colum <0 || grid[row][colum]!=1) {
			return 0 ;
		}
		
		else {
			System.out.println("i is "+ row+"  j is "+colum);
			grid[row][colum]=2;//表示已经遍历过该点,并且判断 与该点相邻的个点,最后将会该岛所有点都设置为 2
			return 1+
			setone(grid,row-1,colum)+
			setone(grid,row+1,colum)+
			setone(grid,row,colum-1)+
			setone(grid,row,colum+1);
		}
		
	}
	
public int numIslands(int[][] grid) {
	//遍历整个二位数组就可以了
	int rowmax = grid.length;
	System.out.println("rowmax is "+ rowmax );
	int colunmmax =grid[0].length;
	int sum=0;//统计当前岛屿个数
	int max =0;
	
	for(int i=0;imax) {
					max = temp;
				}
				sum++;
				
			}
			
		}
		System.out.println("最大岛屿数量为 ::" +max);
	}
	
	return sum;
        
    }
}

结果截图

letcode 200 岛屿数量(改)_第1张图片

你可能感兴趣的:(letcode 200 岛屿数量(改))