搜索专项---Flood Fill

news2024/11/27 1:22:33


文章目录

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

一、池塘计数OJ链接

1.BFS做法

#include <bits/stdc++.h>

#define x first
#define y second

typedef 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 second

typedef 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 second

typedef 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.coloradmin.cn/o/1433203.html

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

相关文章

matlab使用jdbc连接数据库

1、打包jdbc 2、在matlab安装目录下&#xff0c;进去toolbox目录下&#xff0c;新建一个对应放jdbc包的文件夹&#xff0c;加入放入的是mysql的jdbc驱动包&#xff0c;就新建一个mysql目录&#xff0c;将驱动包放入mysql目录下 3、在toolbox目录下&#xff0c;找到local目录&a…

李沐《动手学深度学习》循环神经网络 经典网络模型

系列文章 李沐《动手学深度学习》预备知识 张量操作及数据处理 李沐《动手学深度学习》预备知识 线性代数及微积分 李沐《动手学深度学习》线性神经网络 线性回归 李沐《动手学深度学习》线性神经网络 softmax回归 李沐《动手学深度学习》多层感知机 模型概念和代码实现 李沐《…

Linux进程信号(2)--信号的保存

目录 1.阻塞信号 1.1 信号其他相关常见概念 1.实际执行信号的处理动作称为信号递达(Delivery&#xff09; 2.信号从产生到递达之间的状态,称为信号未决(Pending)。 3.进程可以选择阻塞 (Block )某个信号。 1.2信号在内核中的表示 sigset_t 信号集操作函数 使用sigprocm…

ReactNative实现弧形拖动条

我们直接看效果 先看下面的使用代码 <CircularSlider5step{2}min{0}max{100}radius{100}value{30}onComplete{(changeValue: number) > this.handleEmailSbp(changeValue)}onChange{(changeValue: number) > this.handleEmailDpd(changeValue)}contentContainerStyle{…

MicroPython ESP32开发:通过寄存器直接访问外围设备

可以通过直接读写寄存器来控制 ESP32 的外设。这就需要阅读数据手册&#xff0c;了解要使用哪些寄存器以及要写入哪些值。下面的示例展示了如何打开和更改 MCPWM0 外设的预分频器。 from micropython import const from machine import mem32# Define the register addresses …

SpringBoot中数据库的连接及Mybatis的配置和使用

目录 1 在pom.xml中引入相关依赖 2 对数据库进行配置 2.1 配置application.yml 2.2 idea连接数据库 (3.2.1有用到) 3 Mybatis的使用 3.1 测试文件的引入 3.2 使用 3.2.1 使用注解(有小技巧(✪ω✪)) 3.2.2 使用动态sql 1 在pom.xml中引入相关依赖 <dependencies&g…

单片机学习笔记---按键控制LED流水灯模式定时器时钟

目录 代码讲解 初始化函数 1.定时器部分的配置步骤 第一步&#xff0c;对TMOD的赋值 第二步&#xff0c;给TF0赋值 第三步&#xff0c;给TR0赋值开启定时器 第四步&#xff0c;给TL0和TH0赋初值 2.中断系统部分的配置步骤 第一步&#xff0c;给ET0赋值 第二步&#x…

docker下,容器无法启动,要删除里面的文件

第一步&#xff1a;进入docker cd /var/lib/docker 第二步&#xff1a;查找&#xff0c;我这里是拼音分词器 find ./ -name py 第三步&#xff1a;得到路径 第四步&#xff1a;删除或复制或移动&#xff0c;我这里是删除py文件夹 rm -rf ./over那一串 第五步&#xff1a;想干…

【日常总结】SourceTree 1.5.2.0 更换用户名称和密码

一、场景 二、问题 三、解决方案 > 方案一&#xff1a;删除缓存文件 > 方案二&#xff1a;更新最新版本&#xff0c;可以直接修改密码&#xff08;推荐&#xff09; 方案一&#xff1a;删除缓存文件 Stage 1&#xff1a;设置显示隐藏文件 Stage 2&#xff1a;打开…

minitouch王者荣耀按键百分比

minitouch王者荣耀按键百分比 3 技能英雄 原图 2376 x 1104 xy说明x百分比y百分比23761104总分辨率160444金币0.0673400673400670.402173913043478296440物品10.1245791245791250.398550724637681296566物品20.1245791245791250.51268115942029470864摇杆0.1978114478114480…

【Docker进阶】镜像制作-用快照制作Docker镜像

进阶一 docker镜像制作 文章目录 进阶一 docker镜像制作1. 镜像制作及原因2. Docker镜像制作的方式3. 快照制作镜像 1. 镜像制作及原因 镜像制作是因为某种需求&#xff0c;官方的镜像无法满足需求&#xff0c;需要我们通过一定手段来自定义镜像来满足要求。 制作镜像往往有…

Stable Diffusion 模型下载:国风4 GuoFeng4 XL

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十下载地址模型介绍 欢迎使用GuoFeng4模型 - 这是一个微调后的全能的SDXL模型,也可以说是对国人喜欢的画风微调过的模型,具有2.5D,CG,游戏,建模质感。基于SDXL1.0训练。因为SDXL的升…

2024最新版鸿蒙HarmonyOS开发工具安装使用指南

2024最新版鸿蒙HarmonyOS开发工具安装使用指南 By JacksonML 0. 什么是鸿蒙Harmony OS&#xff1f; 华为鸿蒙系统&#xff08;HUAWEI Harmony OS&#xff09;&#xff0c;是华为公司在2019年8月9日于东莞举行的华为开发者大会&#xff08;HDC.2019&#xff09;上正式发布的分…

CAN通信----(创芯科技)CAN分析仪----转CANTest使用

点击进入官方链接进行下载创芯科技 CAN分析仪资料包&#xff1a; 创芯科技的官网&#xff1a;https://m.zhcxgd.com/ 我使用的是至尊版红色带OBD转接头的&#xff1a; 所有下图是我选择…

antv/x6 边添加鼠标悬浮高亮和删除功能

antv/x6 边添加鼠标悬浮高亮和删除功能 效果添加悬浮效果和删除工具取消悬浮效果边删除后的回调函数 效果 添加悬浮效果和删除工具 this.graph.on(edge:mouseenter, ({ cell }) > {let cellId cell.store.data.source.celllet sourceCell _this.graph.getCellById(cellId…

【高质量精品】2024美赛A题22页word版成品论文+数据+多版本前三问代码及代码讲解+前四问思路模型等(后续会更新)

一定要点击文末的卡片&#xff0c;进入后&#xff0c;即可获取完整资料后续参考论文!! 整体分析:这个题目是一个典型的生态系统建模问题&#xff0c;涉及到动物种群的性比例变化、资源可用性、环境因素、生态系统相互作用等多个方面。这个题目的难点在于如何建立一个合理的数学…

P4071 [SDOI2016] 排列计数 错排,递归公式

错排公式理解&#xff1a; //f(x)表示1~x的错排数目 // //1选择(x-1种&#xff09; //乘以剩下的总数目就是答案。//(1选了2就接着排2了&#xff0c;这样所有的都可以算到&#xff0c;是递归所以难想)// 选2时 // 2可选 1 和 3~x//2选1&#xff0c;对2开始来说此次总数就是1*f(…

Ansible自动化工具(1)

目录 ansible的特性&#xff1a;. 二.部署ansible 管理端安装 ansible&#xff1a; ansible 目录结构&#xff1a; 管理主机上配置主机清单&#xff1a; ​编辑 配置密钥对验证&#xff1a; ansible 命令行模块 &#xff1a; 1&#xff0e;command 模块 指定 ip 执行…

【HTML 基础】元数据 meta 标签

文章目录 1. 设置字符集2. 描述网页内容3. 设置关键词4. 网页重定向5. 移动端优化注意事项结语 在网页开发中&#xff0c;<meta> 标签是一种十分重要的 HTML 元数据标签。通过巧妙使用 <meta> 标签&#xff0c;我们能够设置各种元数据&#xff0c;从而影响网页在浏…

STM32WLE5JC

多协议LPWAN 32位 ARM Cortex-M4 MCUs&#xff0c;LoRa&#xff0c;FSK&#xff0c;MSK&#xff0c;BPSK&#xff0c;最大256KB FLASH&#xff0c;64KB SRAM。 LPWAN代表低功耗广域网&#xff08;Low-Power Wide-Area Network&#xff09;&#xff0c;是一种无线网络技术&…