热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++或Go求矩阵里的岛屿的数量详解

这篇文章主要介绍了C++和go实现LeetCode(200.岛屿的数量),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,

给你一个由 ‘1"(陆地)和 ‘0"(水)组成的的二维网格,请你计算网格中岛屿的数量。

岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。此外,你可以假设该网格的四条边均被水包围。

示例 1:

输入:

grid = [
[“1”,“1”,“1”,“1”,“0”],
[“1”,“1”,“0”,“1”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“0”,“0”,“0”]
]

输出:

1

示例 2:

输入:

grid = [
[“1”,“1”,“0”,“0”,“0”],
[“1”,“1”,“0”,“0”,“0”],
[“0”,“0”,“1”,“0”,“0”],
[“0”,“0”,“0”,“1”,“1”]
]

输出:

3

提示:

m == grid.length
n == grid[i].length
1 <= m, n <= 300
grid[i][j] 的值为 ‘0" 或 ‘1"

此孤岛问题,可以通过DFS算法解决,具体如下:

1、C++实现

//island.cpp

#include 
#include 
#include 
#include 
using namespace std;
//判断坐标(r,c)是否存在网络中
bool inArea(vector>& grid, int r, int c) {
	bool bRow = (r >= 0) && (r <(int)grid.size());
	bool bCol = (c >= 0) && (c <(int)grid[0].size());
	return bRow && bCol;
}
//void dfs(int[][] grid, int r, int c) {
void dfs(vector>& grid, int r,int c){
	//判断base case
	//如果坐标(r,c)超出了网格范围,则直接返回
	if (!inArea(grid,r,c)) {
		return;
	}
	//如果不是岛屿,则直接返回
	if (grid[r][c] != "1") {
		return;
	}
	//将原来的"1"改成"0"
	grid[r][c] = "2";
	//访问上、下、左、右四个相邻结点
	dfs(grid, r - 1, c);
	dfs(grid, r + 1, c);
	dfs(grid, r , c-1);
	dfs(grid, r , c+1);
}
//求岛屿的个数
//时间复杂度:O(MN)O(MN),其中 MM 和 NN 分别为行数和列数。
//空间复杂度:O(MN)O(MN),在最坏情况下,整个网格均为陆地,深度优先搜索的深度达到MN。
//
int numIslands(vector>& grid){
	int r = grid.size();
	if (!r)
		return 0;
	int c = grid[0].size();
	int num = 0;
	for (int i = 0; i  row1;
	row1.push_back("1");
	row1.push_back("1");
	row1.push_back("1");
	vector row2;
	row2.push_back("0");
	row2.push_back("1");
	row2.push_back("0");
	vector row3;
	row3.push_back("1");
	row3.push_back("0");
	row3.push_back("0");
	vector row4;
	row4.push_back("1");
	row4.push_back("0");
	row4.push_back("1");
	vector> grid;
	grid.push_back(row1);
	grid.push_back(row2);
	grid.push_back(row3);
	grid.push_back(row4);
	int numLands = numIslands(grid);
	cout <<"numLands= " <

效果如下:

图(1) 孤岛的个数

2、go语言实现

//island.go

package main
import "fmt"
func numIslands(grid [][]byte) int {
	nums := 0
	for i:=0; i=row || j<0 || j>= col {
		return
	}
	if (*grid)[i][j] == "1" {
		(*grid)[i][j] = "2"
		DFS(grid,i-1,j)
		DFS(grid,i+1,j)
		DFS(grid,i,j-1)
		DFS(grid,i,j+1)
	}
}
func main() {
	var grid = make([][]byte, 4)
	grid[0] = []byte{"1","1","1"}
	grid[1] = []byte{"0","1","0"}
	grid[2] = []byte{"1","0","0"}
	grid[3] = []byte{"1","0","1"}
	res := numIslands(grid)
	fmt.Println("numlands=",res)
}

效果如下:

图(2) go语言实现,求岛屿的个数

参考文献

来源:力扣(LeetCode)

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程笔记的更多内容!


推荐阅读
  • socket8 [命名管道]
    ::命名管道不但能实现同一台机器上两个进程通信,还能在网络中不同机器上的两个进程之间的通信机制。与邮槽不同,命名管道是采用基于连接并且可靠的传输方式,所以命名管道传输数据只能一对一 ... [详细]
  • 这篇文章主要讲解了“GradeBook类怎么定义”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Grad ... [详细]
  • wyh2000andastringproblemTimeLimit:20001000MS(JavaOthers)MemoryLimit:13107265 ... [详细]
  • Educational Codeforces Round 43 (Rated for Div. 2)
    EducationalCodeforcesRound43(RatedforDiv.2)https:codeforces.comcontest976A ... [详细]
  • 这篇文章将为大家详细讲解有关如何使用C语言strcmp函数,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一 ... [详细]
  • 使用临时文件tmpnam该函数的功能是产生一个唯一的文件名系统回味该文件分配一块内存来保存临时变量例如下面的代码#includeintmain(){charnam ... [详细]
  • 水题。。main.cppPATA1121CreatedbyPhoenixon2018224.Copyright©2018年Phoenix.Allrightsreserve ... [详细]
  • *Copyright(c)2016,烟台大学计算机与控制工程学院Allrightsreserved.文件名称:字符串加密.cpp作者:彭友程完成日期&# ... [详细]
  • 原题我们定义“区间的价值”为一段区间的最大值*最小值。一个区间左端点在L,右端点在R,那么该区间的长度为(R−L+1)。求长度分别为1~n的区间的最大价值。保证数据随机因为保证数据随 ... [详细]
  • 【题意】点击打开链接【分析&解题思路】除去起点(1,1)和终点(n,m)已经固定,中间能经过的是一个(n-2)*(m-2)的矩阵然后我们可以在这个矩阵里取0个(就是直接从起点跳到 ... [详细]
  • 实验七、绕过ASLR 第二部分
    7.1实验环境VM配置:Ubuntu12.04(x86)7.2实验原理什么是爆破?使用爆破技巧,来绕过共享库地址随机化。7.3实验过程7. ... [详细]
  • Givens1,s2,s3,findwhethers3isformedbytheinterleavingofs1ands2.Forexample,Given:s1aabcc ... [详细]
  • 盘子|圆盘_递归与分治策略第一节:递归和典型递归问题
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了递归与分治策略-第一节:递归和典型递归问题相关的知识,希望对你有一定的参考价值。文章目录 ... [详细]
  • 接上文http:blog.itpub.net29254281viewspace-1318239领导让开发同学鼓捣一个可配置化的后台.又回到了原来的问题如果要灵活,很多参数要 ... [详细]
  • The“travellingsalesmanproblem”asksthefollowingquestion:“Givenalistofcitiesandthedistancesb ... [详细]
author-avatar
mobiledu2502900505
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有