本文共 1922 字,大约阅读时间需要 6 分钟。
题目
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: 1Example 2:
11000
11000 00100 00011 Answer: 3思路
可以参考:
有一点不同的是本题目只用考虑四个方向,而参考题目是考虑了8个方向。代码
/*------------------------------------------------------* 日期:2014-04-10* 作者:SJF0115* 题目: 200.Number of Islands* 网址:https://leetcode.com/problems/number-of-islands/* 结果:AC* 来源:LeetCode* 博客:--------------------------------------------------------*/#include#include using namespace std;class Solution {public: int numIslands(vector > &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 > &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 > grid = { { '1', '1', '0', '0', '0'}, { '1', '1', '0', '0', '0'}, { '0', '0', '1', '0', '0'}, { '0', '0', '0', '1', '1'} }; cout< <
运行时间