Leetcode之深度优先搜索(DFS)专题-200. 岛屿数量(Number of Islands)
Leetcode之深度优先搜索(DFS)专题-200. 岛屿数量(Number of Islands)
深度优先搜索的解题详细介绍,点击
给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 输入: 11110 11010 11000 00000 输出: 1 示例 2: 输入: 11000 11000 00100 00011 输出: 3
分析:这题同样是求连通块,相比于130. 被围绕的区域(Surrounded Regions)题少了很多限制条件,同样引入vis,点从其四个方向搜索。
class Solution { int vis[][] = null; int dirx[] = {0,0,1,-1}; int diry[] = {1,-1,0,0}; public int numIslands(char[][] grid) { if(grid==null || grid.length==0){ return 0; } int ans = 0; vis = new int[grid.length][grid[0].length]; for(int i=0;i<grid.length;i++){ for(int j=0;j<grid[0].length;j++){ if(grid[i][j]=='1' && vis[i][j]!=1){ ans++; dfs(grid,i,j); } } } return ans; } public void dfs(char[][] board,int x,int y){ if(x<0 || y<0 || x>=board.length || y>=board[0].length || board[x][y]=='0' || vis[x][y]==1){ return; } vis[x][y] = 1; for(int i=0;i<4;i++){ int xx = x+dirx[i]; int yy = y+diry[i]; dfs(board,xx,yy); } } }
作者:秦羽纶
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.