博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LintCode: Number of Islands
阅读量:5099 次
发布时间:2019-06-13

本文共 2277 字,大约阅读时间需要 7 分钟。

分析:经典连通分量问题

图:

  节点:所有1的位置

  边:两个相邻的1的位置有一条边

BFS/DFS (DFS使用递归,代码较短)

  选一个没标记的点,然后搜索,扩展4个邻居(如果有),直到不能扩展

  每一次是一个连通分量

  难点:标记节点——判重

C++

DFS

1 class Solution { 2 public: 3     void help(vector
>& a, int x, int y) { 4 if ((x < 0) || (x >= a.size()) || (y < 0) || (y >= a[x].size()) || a[x][y] == false) { 5 return ; 6 } 7 a[x][y] = false; 8 help(a, x + 1, y); 9 help(a, x - 1, y);10 help(a, x, y + 1);11 help(a, x, y - 1);12 }13 /**14 * @param grid a boolean 2D matrix15 * @return an integer16 */17 int numIslands(vector
>& grid) {18 // Write your code here19 int ans = 0;20 for (int i = 0; i < grid.size(); ++i) {21 for (int j = 0; j < grid[i].size(); ++j) {22 if (grid[i][j] == true) {23 help(grid, i, j);24 ++ans;25 }26 }27 }28 return ans;29 }30 };

C++

BFS

1 class Solution { 2 public: 3     void help(vector
>& a, int x, int y) { 4 queue
> q; 5 const int dx[] = {-1, 1, 0, 0}; 6 const int dy[] = {
0, 0, -1, 1}; 7 a[x][y] = false; 8 for (q.push(make_pair(x, y)); !q.empty(); q.pop()) { 9 x = q.front().first;10 y = q.front().second;11 for (int i = 0; i < 4; ++i) {12 int nx = x + dx[i];13 int ny = y + dy[i];14 if ((nx >= 0) && (nx < a.size()) && (ny >= 0) &&(ny < a[nx].size()) && (a[nx][ny] == true)) {15 a[nx][ny] = false;16 q.push(make_pair(nx, ny));17 }18 }19 }20 }21 /**22 * @param grid a boolean 2D matrix23 * @return an integer24 */25 int numIslands(vector
>& grid) {26 // Write your code here27 int ans = 0;28 for (int i = 0; i < grid.size(); ++i) {29 for (int j = 0; j < grid[i].size(); ++j) {30 if (grid[i][j] == true) {31 help(grid, i, j);32 ++ans;33 }34 }35 }36 return ans;37 }38 };

 

转载于:https://www.cnblogs.com/CheeseZH/p/5012230.html

你可能感兴趣的文章
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>
聚合与组合
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
在centos上开关tomcat
查看>>
android dialog使用自定义布局 设置窗体大小位置
查看>>
ionic2+ 基础
查看>>
[leetcode]Minimum Path Sum
查看>>
Aizu - 1378 Secret of Chocolate Poles (DP)
查看>>
csv HTTP简单表服务器
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>