题目描述:

Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.

Example 1:

11110
11010
11000
00000

Answer: 1

Example 2:

11000
11000
00100
00011

Answer: 3

题目要求为:

1) 被0完全包围的一群1即为一个岛屿

2) 超出数组范围的为0

目标为:

返回岛屿个数

解题思路:

这题可以用循环遍历字符数组找到1,在找到一个1后,利用递归把与这个1相邻的其他1找出并置换成其他字符,这样就可以避免在遍历时碰到重复的岛屿。

代码:

 1 class Solution {
 2 public:
 3     int numIslands(vector<vector<char>>& grid) {
 4         int num = 0;
 5         for(int i = 0; i < grid.size(); i++) {
 6             for(int j = 0; j < grid[0].size(); j++) {
 7                 if(grid[i][j] == '1'){
 8                 //循环找1
 9                     dfs(grid, i, j);
10                     num++;
11                 }
12             }
13         }
14         return num;
15     }
16 private:
17     void dfs(vector<vector<char>>& grid, int i, int j) {
18     //把附近的1全置换成2
19         if(i >= grid.size() || i < 0 || j < 0 || j >= grid[0].size() || grid[i][j] != '1')
20             return;
21         grid[i][j] = '2';
22         dfs(grid, i+1, j);
23         dfs(grid, i, j+1);
24         dfs(grid, i-1, j);
25         dfs(grid, i, j-1);
26     }
27 
28 };

 

 

 

 

posted on 2018-04-03 15:36  宵夜在哪  阅读(95)  评论(0编辑  收藏  举报