leetcode 200. Number of Islands DFS深度优先遍历
来源:互联网 发布:大数据 涂子沛 下载 编辑:程序博客网 时间:2024/06/14 04:25
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的数量,也就是岛屿的数量,这就是一个简单的DFS深度优先遍历应用,和这一道题leetcode 130. Surrounded Regions DFS + 矩阵遍历 ,基本一致,值得学习。
这是一个十分典型的DFS深度优先遍历的样例,值得学习!
代码如下:
public class Solution { public int numIslands(char[][] grid) { if (grid == null || grid.length == 0 || grid[0].length == 0) return 0; int count = 0; for (int i = 0; i < grid.length; i++) { for (int j = 0; j < grid[0].length; j++) { if (grid[i][j] == '1') { count++; dfsSearch(grid, i, j); } } } return count++; } // 每遇到'1'后, 开始向四个方向 递归搜索. 搜到后变为'0', // 因为相邻的属于一个island. 然后开始继续找下一个'1'. private void dfsSearch(char[][] grid, int i, int j) { if (i < 0 || i >= grid.length || j < 0 || j >= grid[0].length || grid[i][j] != '1') return; // 也可以才用一个visited数组,标记遍历过的岛屿 grid[i][j] = '0'; dfsSearch(grid, i + 1, j); dfsSearch(grid, i - 1, j); dfsSearch(grid, i, j + 1); dfsSearch(grid, i, j - 1); }}
下面是C++的做法,就是一个很简单的DFS深度优先遍历的简单应用
代码如下:
#include <iostream>#include <vector>#include <string>#include <map>#include <cmath>#include <queue>#include <stack>#include <algorithm>using namespace std;class Solution{public: int numIslands(vector<vector<char>>& g) { int count = 0; if (g.size() <= 0) return count; vector<vector<bool>> visit(g.size(),vector<bool>(g[0].size(),false)); for (int i = 0; i < g.size(); i++) { for (int j = 0; j < g[0].size(); j++) { if (g[i][j] == '1' && visit[i][j] == false) { getAll(g, visit, i, j); count++; } } } return count; } void getAll(vector<vector<char>>& g, vector<vector<bool>>& visit, int x, int y) { if (x < 0 || x >= g.size() || y < 0 || y >= g[0].size()) return; else { if (g[x][y] == '1' && visit[x][y]==false) { visit[x][y] = true; getAll(g, visit, x - 1, y); getAll(g, visit, x + 1, y); getAll(g, visit, x, y + 1); getAll(g, visit, x, y - 1); } } }};
阅读全文
0 0
- leetcode 200. Number of Islands DFS深度优先遍历
- LeetCode 200. Number of Islands (DFS)
- leetcode 200. Number of Islands DFS
- LeetCode Number of Islands DFS
- 【广度优先遍历】Number of Islands
- [leetcode] 200 Number of Islands(DFS)
- LeetCode 200 Number of Islands(DFS)
- leetcode 404. Sum of Left Leaves DFS深度优先遍历
- leetcode 572. Subtree of Another Tree 深度优先遍历DFS
- leetcode 695. Max Area of Island 深度优先遍历DFS
- [LeetCode]200.Number of Islands
- LeetCode 200. Number of Islands
- [leetcode] 200.Number of Islands
- 【leetcode】 200. Number of Islands
- [leetcode] 200. Number of Islands
- Leetcode 200. Number of Islands
- 200. Number of Islands LeetCode
- leetcode 200. Number of Islands
- jQuery-子元素过滤选择器
- Android Error in Eclipse: “Unable to execute dex: Cannot merge new index 66904 into a non-jumbo inst
- java互联网架构-Mybatis缓存机制
- 解决struts2以GET方式提交表单中文乱码问题
- 第二周 项目3 汉诺塔程序
- leetcode 200. Number of Islands DFS深度优先遍历
- Android JNI开发(3)--引用类型
- struts2架构中核心对象的探索—— ActionContextClearUp
- 数据库中Any和All区别
- hexo建站详解----jade 。swig。ejs模板使用 hexo favicon设置
- Websocket(一)简单的demo实现
- Caused by:Could not open ServletContext resource [/WEB-INF/dispatcher-servlet.xml]
- swiper 定位到指定页面或位置
- Nginx学习总结(10)——Nginx前后端分离将多个请求转发到多个Tomcat,负载均衡反向代理