搜索专项---Flood Fill


文章目录

  • 池塘计数
  • 城堡问题
  • 山峰与山谷

一、池塘计数OJ链接

1.BFS做法

#include <bits/stdc++.h>#define x first
#define y secondtypedef std::pair<int,int> PII;constexpr int N=1010;int n,m;
char g[N][N];
bool st[N][N];//用来表示已经记录过的
std::queue<PII> q;//用来表示该点已经是土地来遍历周围是否存在土地,如果有加入到队列中int dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
int dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};void bfs(int ax,int ay)
{q.push({ax,ay});st[ax][ay]=true;while(!q.empty()){PII t=q.front();q.pop();for(int i=t.x-1;i<=t.x+1;i++)for(int j=t.y-1;j<=t.y+1;j++){if (i == t.x && j == t.y) continue;if (i < 0 || i >= n || j < 0 || j >= m) continue;if (g[i][j] == '.' || st[i][j]) continue;q.push({i,j});st[i][j]=true;}}}
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);std::cin>>n>>m;for(int i=0;i<n;i++) std::cin>>g[i];int ans=0;for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(g[i][j]=='W'&&!st[i][j]){bfs(i,j);ans++;}std::cout<<ans<<std::endl;return 0;
}

1.DFS做法

#include <bits/stdc++.h>constexpr int N=1010;int n,m;
char g[N][N];
bool st[N][N];int dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0};
int dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};void dfs(int x,int y)
{st[x][y]=true;for(int i=0;i<8;i++)if(g[x+dx[i]][y+dy[i]]=='W'&&!st[x+dx[i]][y+dy[i]])dfs(x+dx[i],y+dy[i]);
}
int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);std::cin>>n>>m;for(int i=0;i<n;i++) std::cin>>g[i];int ans=0;for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(g[i][j]=='W'&&!st[i][j]){dfs(i,j);ans++;}std::cout<<ans<<std::endl;return 0;
}

二、城堡问题OJ链接

1.BFS做法

#include <bits/stdc++.h>#define x first
#define y secondtypedef std::pair<int, int> PII;constexpr int N=55;int n,m;
int g[N][N];
bool st[N][N];
std::queue<PII> q;int dx[4] = {0, -1, 0, 1}, dy[4] = {-1, 0, 1, 0};int bfs(int ax,int ay)
{q.push({ax,ay});st[ax][ay]=true;int area=0;while(!q.empty()){PII t=q.front();q.pop();area++;for(int i=0;i<4;i++){int a=t.x+dx[i],b=t.y+dy[i];if(a<0||a>=n||b<0||b>=m) continue;if(st[a][b]) continue;if(g[t.x][t.y]>>i&1) continue;q.push({a,b});st[a][b]=true;}}return area;
}int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);std::cin>>n>>m;for(int i=0;i<n;i++)for(int j=0;j<m;j++)std::cin>>g[i][j];int cnt=0;int max_area=0;for(int i=0;i<n;i++)for(int j=0;j<m;j++){if(!st[i][j]){cnt++;max_area=std::max(max_area,bfs(i,j));}}std::cout<<cnt<<std::endl;std::cout<<max_area<<std::endl;return 0;
}

1.DFS做法

#include <bits/stdc++.h>constexpr int N=55;int n,m;
int g[N][N];
bool st[N][N];
int ans;int dx[4] = {0, -1, 0, 1}, dy[4] = {-1, 0, 1, 0};int dfs(int ax,int ay)
{st[ax][ay]=true;for(int i=0;i<4;i++){int a=ax+dx[i],b=ay+dy[i];if(a<0||a>=n||b<0||b>=m) continue;if(st[a][b]) continue;if(g[ax][ay]>>i&1) continue;ans+=dfs(a,b);}return 1;
}int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);std::cin>>n>>m;for(int i=0;i<n;i++)for(int j=0;j<m;j++)std::cin>>g[i][j];int cnt=0,max_area=0;for(int i=0;i<n;i++)for(int j=0;j<m;j++)if(!st[i][j]){cnt++;ans=1;dfs(i,j);max_area=std::max(max_area,ans);}std::cout<<cnt<<std::endl;std::cout<<max_area<<std::endl;return 0;
}

三、山峰与山谷OJ链接

1.BFS做法

如果在搜索过程中没有出现过比当前点更高的点,则该点及等高点组成山峰。

如果在搜索过程中没有出现过比当前点更低的点,则该点及等高点组成山谷。

#include <bits/stdc++.h>#define x first
#define y secondtypedef std::pair<int,int> PII;constexpr int N=1010;int n;
int g[N][N];
std::queue<PII> q;
bool st[N][N];void bfs(int ax,int ay,bool &has_higher,bool &has_lower)
{q.push({ax,ay});st[ax][ay]=true;while(!q.empty()){PII t=q.front();q.pop();for(int i=t.x-1;i<=t.x+1;i++)for(int j=t.y-1;j<=t.y+1;j++){if(i==t.x&&j==t.y) continue;if(i<0||i>=n||j<0||j>=n) continue;if(g[i][j]!=g[t.x][t.y]){if(g[i][j]>g[t.x][t.y]) has_higher=true;else has_lower=true;}else if(!st[i][j]){q.push({i,j});st[i][j]=true;}}}
}int main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);std::cin>>n;for(int i=0;i<n;i++)for(int j=0;j<n;j++)std::cin>>g[i][j];int peek=0,valley=0;for(int i=0;i<n;i++)for(int j=0;j<n;j++)if(!st[i][j]){bool has_higher=false,has_lower=false;bfs(i,j,has_higher,has_lower);if(!has_higher) peek++;if(!has_lower) valley++;}std::cout<<peek<<" "<<valley<<std::endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/667585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaEE - 21( 15000字 Tomcat 和 HTTP 协议入门 -2)

一&#xff1a; HTTP 响应 1.1 认识 “状态码” (status code) 状态码表示访问一个页面的结果. (是访问成功, 还是失败, 还是其他的一些情况…)&#xff0c;以下为常见的状态码. 1.1.1 200 OK 这是一个最常见的状态码, 表示访问成功. 抓包抓到的大部分结果都是 200 HTTP/…

Unity引擎学习笔记之【混合动画操作】

混合动画Hybrid Animation Unity中的Blend Tree是一种动画混合技术&#xff0c;它允许开发者通过添加多个动画片段&#xff08;例如奔跑、行走、跳跃等&#xff09;来创建复杂的角色动画。Blend Tree允许在不同的状态下平滑地过渡并混合不同的动画。例如&#xff0c;在奔跑和行…

目标检测:2如何生成自己的数据集

目录 1. 数据采集 2. 图像标注 3. 开源已标记数据集 4. 数据集划分 参考&#xff1a; 1. 数据采集 数据采集是深度学习和人工智能任务中至关重要的一步&#xff0c;它为模型提供了必要的训练样本和测试数据。在实际应用中&#xff0c;数据采集的方法多种多样&#xff0c;每…

3.0 Hadoop 概念

本章着重介绍 Hadoop 中的概念和组成部分&#xff0c;属于理论章节。如果你比较着急可以跳过。但作者不建议跳过&#xff0c;因为它与后面的章节息息相关。 Hadoop 整体设计 Hadoop 框架是用于计算机集群大数据处理的框架&#xff0c;所以它必须是一个可以部署在多台计算机上…

Multisim14.0仿真(五十)基于CD4518的计数器设计

一、CD4518简介: CD4518是二、十进制(8421编码)同步加计数器,内含两个单元的加计数器。每单个单元有两个时钟输入端CLK和EN,可用时钟脉冲的上升沿或下降沿触发。可知,若用ENABLE信号下降沿触发,触发信号由EN端输入,CLK端置“0”;若用CL℃K信号上升沿触发,触发信号由C…

《Python 网络爬虫简易速速上手小册》第1章:Python 网络爬虫基础(2024 最新版)

文章目录 1.1 网络爬虫简介1.1.1 重点基础知识讲解1.1.2 重点案例&#xff1a;社交媒体数据分析1.1.3 拓展案例1&#xff1a;电商网站价格监控1.1.4 拓展案例2&#xff1a;新闻聚合服务 1.2 网络爬虫的工作原理1.2.1 重点基础知识讲解1.2.2 重点案例&#xff1a;股票市场数据采…

生物素 PEG4 甲基四嗪,Biotin-PEG4-methyltetrazine,用于标记、追踪和分离特定的分子或细胞

生物素四聚乙二醇甲基四嗪&#xff0c;生物素 PEG4 甲基四嗪&#xff0c;Biotin-PEG4-methyltetrazine&#xff0c;用于标记、追踪和分离特定的分子或细胞 您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;生物素四聚乙二醇甲基四嗪&#xff0c;生物素 PEG4 甲基四嗪…

2024三掌柜赠书活动第八期:Web3与DAO:下一代互联网演进逻辑

目录 前言关于Web3和DAO关于《Web3与DAO&#xff1a;下一代互联网演进逻辑》编辑推荐内容简介作者简介精彩书评图书目录书中前言/序言《Web3与DAO&#xff1a;下一代互联网演进逻辑》全书速览结束语 前言 随着区块链技术的崛起&#xff0c;Web3和DAO成为了当前互联网领域炙手…

QXlsx Qt操作excel

QXlsx 是一个用于处理Excel文件的开源C库。它允许你在你的C应用程序中读取和写入Microsoft Excel文件&#xff08;.xlsx格式&#xff09;。该库支持多种操作&#xff0c;包括创建新的工作簿、读取和写入单元格数据、格式化单元格、以及其他与Excel文件相关的功能。 支持跨平台…

云服务器也能挂游戏 安卓模拟器

安卓模拟器云服务器 什么是BlueStacks模拟器主机&#xff1f; 特网科技基于Windows操作系统预装了BlueStacks Android模拟器您能够通过Android模拟器安装Android应用程序、如APP游戏、安卓APP、APP游戏等。 我可以在主机上安装应用程序吗&#xff1f; 你可以在BlueStacks模…

斗破年番:七星斗宗地魔老鬼,首战吊打萧炎,毁灭莲逼出千百二老

Hello,小伙伴们&#xff0c;我是拾荒君。 国漫《斗破苍穹年番》第82期超前爆料&#xff0c;在万众瞩目之下&#xff0c;卡点帝再次展现了他的卡点救场技巧。此次&#xff0c;韩枫为了除掉萧炎&#xff0c;以他击杀魔炎谷四位长老为借口&#xff0c;请来了七品斗宗地魔老鬼。更…

STM32定时器中断

定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时发出中断 定时器就是一个计数器 预分频器&#xff1a;对系统时钟进行分频得到定时器时钟频率 自动重装在值&#xff1a;计数多少个进入中断 基本定时器两个&#xff0c;tim6和7&#xff0c;挂载在apb1 通…

《Python 网络爬虫简易速速上手小册》第6章:Python 爬虫的优化策略(2024 最新版)

文章目录 6.1 提高爬虫的效率6.1.1 重点基础知识讲解6.1.2 重点案例&#xff1a;使用 asyncio 和 aiohttp 实现异步爬虫6.1.3 拓展案例 1&#xff1a;利用 Scrapy 的并发特性6.1.4 拓展案例 2&#xff1a;使用缓存来避免重复请求 6.2 处理大规模数据爬取6.2.1 重点基础知识讲解…

ES6中新增Array.of()函数的用法详解

new Array()方法 ES6为Array增加了of函数用一种明确的含义将一个或多个值转换成数组。因为用new Array()构造数组的时候&#xff0c;是有二意性的。 构造时&#xff0c;传一个参数&#xff0c;实际上是指定数组的长度&#xff0c;表示生成多大的数组。 构造时&#xff0c;传…

QT6调用音频输入输出(超详细)

目录 一、QT6音频调用与QT5的区别 1.QAudioSource代替QAudioInput类 2.QAudioSink代替QAudioOutput类 二、音频操作中Push和Pull的区别 三、依托于Websocket实现实时对讲机 1.AudioIputDevices类 2.AudioOutputDevices类 3.实现的AudioHandler类完整内容 本人实际是要完…

2024机械工程师面试题

1.常用的机械画图软件有哪些 SolidWorks、Pro/e、CATIA、UG、Creo、CAD、inventor。CAXA电子图板. 2.第一视角是___&#xff0c;第三视角是___&#xff1b; 只要区别是&#xff1a;物体所处的位置不同。一般中国都使用第一视角的。 3.气缸属于_____执行元件&#xff0c;电磁…

Scrapy:Python中强大的网络爬虫框架

Scrapy&#xff1a;Python中强大的网络爬虫框架 在当今信息爆炸的时代&#xff0c;从互联网上获取数据已经成为许多应用程序的核心需求。Scrapy是一款基于Python的强大网络爬虫框架&#xff0c;它提供了一种灵活且高效的方式来提取、处理和存储互联网上的数据。本文将介绍Scrap…

【Django开发】美多商城项目第3篇:用户注册和图片验证码开发(附代码,文档已分享)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论django商城项目开发相关知识。本项目利用Django框架开发一套前后端不分离的商城项目&#xff08;4.0版本&#xff09;含代码和文档。功能包括前后端不分离&#xff0c;方便SEO。采用Django Jinja2模板引擎 Vue.js实现…

小白水平理解面试经典题目LeetCode 21. Merge Two Sorted Lists【Linked List类】

21. 将两个有序列表融合 Linked List 数据结构也在面试中经常出现&#xff0c;作为很好处理客户信息存储的结构很方便&#xff0c;也是重点必会项目之一&#xff0c;看看我们如何教懂白月光&#xff0c;成功邀约看电影吧。 小白渣翻译 你将获得两个排序链表 list1 和 list2 …

ElementUI鼠标拖动没列宽度

其实 element ui 表格Table有提供给我们一个resizable属性 按官方文档上描述 它就是控制是否允许拖拽表格列大小的属性 而且 它的默认值就是 true 但是依旧很多人会反应拖拽不了 首先 表格要有边框 如果没有变宽 确实是拖拽不了 给 el-table加上 border属性 运行结果如下 但…