题目
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
思路
可以参考:Find the number of islands
有一点不同的是本题目只用考虑四个方向,而参考题目是考虑了8个方向。
代码
/*------------------------------------------------------
* 日期:2014-04-10
* 作者:SJF0115
* 题目: 200.Number of Islands
* 网址:https://leetcode.com/problems/number-of-islands/
* 结果:AC
* 来源:LeetCode
* 博客:
--------------------------------------------------------*/
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
int numIslands(vector<vector<char>> &grid) {
// 行数
int row = grid.size();
if(row == 0){
return 0;
}//if
// 列数
int col = grid[0].size();
if(col == 0){
return 0;
}//if
int count = 0;
for(int i = 0;i < row;++i){
for(int j = 0;j < col;++j){
// 如果是1且没有被访问过则发现一个新的岛屿
if(grid[i][j] == ‘1‘){
// 以该岛屿做深度遍历
DFS(grid,row,col,i,j);
++count;
}//if
}//for
}//for
return count;
}
private:
// grid 地图 row 行数 col 列数 (x,y)当前坐标
void DFS(vector<vector<char> > &grid,int row,int col,int x,int y){
if(x < 0 || y < 0 || x >= row || y >= col || grid[x][y] == ‘0‘){
return;
}//if
grid[x][y] = ‘0‘;
// right
DFS(grid,row,col,x,y+1);
// left
DFS(grid,row,col,x,y-1);
// top
DFS(grid,row,col,x-1,y);
// bottom
DFS(grid,row,col,x+1,y);
}
};
int main() {
Solution solution;
vector<vector<char> > grid =
{
{‘1‘, ‘1‘, ‘0‘, ‘0‘, ‘0‘},
{‘1‘, ‘1‘, ‘0‘, ‘0‘, ‘0‘},
{‘0‘, ‘0‘, ‘1‘, ‘0‘, ‘0‘},
{‘0‘, ‘0‘, ‘0‘, ‘1‘, ‘1‘}
};
cout<<solution.numIslands(grid)<<endl;
return 0;
}
运行时间
[LeetCode]200.Number of Islands
原文地址:http://blog.csdn.net/sunnyyoona/article/details/44985047