当前位置: 首页 > news >正文

Java学习手册:(数据结构与算法-数组)Number of Islands(leetcode200)

题目:

给的一个二维数组,只含有0和1两个字符。其中1代表陆地,0代表水域。横向和纵向的陆地连接成岛屿,被水域分隔开。问给出的地图中有多少岛屿?

示例一:

输入:

11110

11010

11000

00000

输出:

1

示例二:

输入:

11000

11000

00100

00011

输出:

2

思路:

flood fill方法

代码如下:

package com.haobi; public class NumberofIslands { private static int m, n; // 搜索顺序 private static int d[][] = {{-1,0},{0,1},{1,0},{0,-1}}; private static boolean visited[][]; private static boolean inArea(int x, int y) { return x>=0 && x<m && y>=0 && y<n; } public static void main(String[] args) { //示例1 char[][] c1 = {{'1','1','1','1','0'}, {'1','1','0','1','0'}, {'1','1','0','0','0'}, {'0','0','0','0','0'}}; //示例2 char[][] c2 = {{'1','1','0','0','0'}, {'1','1','0','0','0'}, {'0','0','1','0','0'}, {'0','0','0','1','1'}}; System.out.println(numIslands(c2)); } public static int numIslands(char[][] grid) { m = grid.length; n= grid[0].length; //初始化 visited = new boolean[m][n]; int res = 0; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if(grid[i][j] == '1' && !visited[i][j]) { res++; dfs(grid, i, j); } } } return res; } /** * 递归算法 * 从grid[x][y]的位置开始,进行floodfill * 保证(x,y)是合法的,且grid[x][y]是没有被访问过的陆地 * @param grid * @param x * @param y */ private static void dfs(char[][]grid, int x, int y) { visited[x][y] = true; //搜索四个方向 for(int i=0;i<4;i++) { int newx = x + d[i][0]; int newy = y + d[i][1]; if(inArea(newx, newy) && !visited[newx][newy] && grid[newx][newy] == '1') { dfs(grid, newx, newy); } } return; } }

程序输出结果如下:

3

http://www.cnnetsun.cn/news/3711400.html

相关文章:

  • 学生党降重工具怎么挑?按预算和效果排一排
  • 羽毛球馆场地管理系统的设计与实现
  • C 排序算法:快速排序
  • 无主题内容创作方法论:逆向思维与关键词发散技术
  • 集成学习(ensemble learning)
  • 企业400电话办理全流程指南与优化建议
  • 爬虫转大模型,我的旧方法先崩了:权限日志才是真门槛
  • C++实现大小写不敏感字符串集合:自定义比较器与安全字符处理
  • C++ RESTful API 与 Nginx 集成:构建高性能后端服务的完整实践
  • Gitee代码托管平台核心技术解析与企业实践
  • Taskbar-Lyrics:Windows 11任务栏歌词显示插件完整指南
  • NBM5100A与PIC18F86J50在物联网设备中的低功耗设计
  • 智能 PING 与多接口测试,GN-Q10A 应对能源网络痛点
  • Zotero-GPT终极指南:如何用AI插件快速提升文献管理效率
  • AI生成的PPT,该导出HTML还是PPTX?很多人选错了
  • 终极Silk v3解码器:一键解决微信QQ语音兼容性问题
  • 终极指南:3步免费解锁WeMod Pro完整功能,告别2小时限制!
  • 如何快速解锁WeMod完整功能:终极增强工具使用指南
  • 如何快速安装ComfyUI-WanVideoWrapper:AI视频生成的终极指南
  • Python智能对话机器人开发:记忆、人工干预与搜索集成
  • JAVA计算机毕设之 基于 Vue 的新闻资讯展示与社区论坛系统信息化求知信息推送与用户讨论系统(完整前后端代码+说明文档+LW,调试定制等)
  • JUC-CopyOnWriteArrayList源码学习
  • OpenClaw 部署教程|Windows/macOS 双端电脑自动化 AI 搭建全流程
  • Obsidian加密插件完整指南:安全保护你的敏感笔记内容
  • NFS 配置 -- 客户端
  • Tomcat性能优化实战:从配置到监控全解析
  • ex48——更复杂的用户输入/扫描输入
  • Kubernetes生产环境的十个配置陷阱:从资源限制到探针配置的避坑手册
  • 【QA那些事儿】视频SDK测试方法-场景自动化
  • vLLM与SGLang:大模型推理框架的技术对比与应用指南