蓝桥ACM培训-搜索

news2024/12/26 23:52:12

前言:

   今老师讲了了dfs,虽然我自己之前也自学了一点点,但我还是感觉做题并不是很顺,尤其是今天最后一题,我调试了一下午都没过,还需要积累经验呀。

正文:

Problem:A 白与黑-搜索:

#include <bits/stdc++.h>
using namespace std;
int n,m,sum,newx,newy;
string a[101];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int dfs(int x,int y)
{
    a[x][y]='#';
    for(int i=0;i<4;i++)
    {
        newx=x+dir[i][0];
        newy=y+dir[i][1];
        if(newx>=0&&newx<m&&newy>=0&&newy<n&&a[newx][newy]!='#')
        sum++,dfs(newx,newy);
    }
   // for(int i=1;i<=9;i++){
	//	for(int o=1;o<=6;o++){
	//		cout<<a[i][o];
	//	}
	//	cout<<endl;
//	}
}
int main()
{
    while(cin>>n>>m&&n&&m)
    {
        for(int i=0;i<m;i++)
            cin>>a[i];
        sum=1;
        for(int i=0;i<m;i++)
            for(int j=0;j<n;j++)
                if(a[i][j]=='@')dfs(i,j);
        cout<<sum<<endl;
    }
    return 0;
}

这道题其实是很经典的红与黑问题,在@处开始dfs去搜寻全部可行点并切不需要回溯(不需要回复已标记点)。

Problem:B 迷宫寻路-搜索:

#include <bits/stdc++.h>
 
using namespace std;
 
int n,m;
int stx,sty,enx,eny;
string a[1005];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
 
void dfs(int x,int y)
{
    a[x][y]='#';
    for(int i=0;i<4;i++)
    {
        int newx=x+dir[i][0];
        int newy=y+dir[i][1];
        if(newx>=0 && newx<n && newy>=0 && newy<m && a[newx][newy]=='*')
        {
            dfs(newx,newy);
        }
    }
}
int main()
{
    while(scanf("%d%d",&n,&m)!=-1)
    {
        stx=sty=enx=eny=-1;
        for(int i=0;i<n;i++) cin>>a[i];
 
        for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
        {
            if((i==0 || i==n-1 || j==0 || j==m-1) && a[i][j]=='*')
            {
                if(stx==-1) stx=i,sty=j;
                else enx=i,eny=j;
            }
        }
        dfs(stx,sty);
        if(a[enx][eny]!='#') printf("NO\n");
        else printf("YES\n");
    }
}

找到两个边沿的起点在从一个出发开始dfs,标记所有搜到的点,最后看看另一个起点是否被标记即可。

Problem:C 猴群-搜索:

#include <bits/stdc++.h>
using namespace std;
int n,m;
int num;
string a[105];
int dir[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
int dfs(int x,int y)
{
    a[x][y]='0';
    for(int i=0;i<n;i++)
    {
        int newx=x+dir[i][0];
        int newy=y+dir[i][1];
        if(newx>=0 && newx<n && newy>=0 && newy<m && a[newx][newy]!='0')
        {
            dfs(newx,newy);
        }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    num=0;
    for(int i=0;i<n;i++) cin>>a[i];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(a[i][j]!='0')
            {
                num++;
                dfs(i,j);
            }
        }
    }
    printf("%d\n",num);
}

老师专门讲了这个题,我们只需从头遍历到尾去找非0值,找到后答案加1,并从该点出发搜寻相邻的全部非0值,将他们更新为0,在继续遍历即可。

Problem:D 01迷宫-搜索:

#include <bits/stdc++.h>
using namespace std;
char mp[1009][1009];
int n,m,fx,fy,tx,ty,cnt;
int book[1009][1009],ans[100009],dis[1009][1009];
int nx[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
void dfs(int x,int y){
	//cout<<x<<" "<<y<<endl;
	book[x][y]=1;
	dis[x][y]=cnt;ans[cnt]++;
	for(int i=0;i<=3;i++){
		tx=x+nx[i][0];ty=y+nx[i][1];
		if(tx<1||tx>n||ty<1||ty>n||mp[tx][ty]==mp[x][y]||book[tx][ty]==1)continue;
		dfs(tx,ty);
	}
	//return;
}
int main(){
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int o=1;o<=n;o++){
			cin>>mp[i][o];
		}
	}
	cnt=1;
	while(m--){
		cin>>fx>>fy;
		if(dis[fx][fy]==0){cnt++;dfs(fx,fy);cout<<ans[cnt]<<endl;
		else cout<<ans[dis[fx][fy]]<<endl;
		}
	return 0;
}

这题是洛谷的1141题,在 oj上更新过数据,我不知道老师加了个什么数据进去,反正我优化了一下午代码,洛谷上都过了,在林大oj上还是TLE,心态炸了。这题和以往题差不多,但为了优化时间我们在搜索时标记一下,下次搜索时就不用在找一次了,听说用记忆化搜索可以过,等我这几天去了解一下,之后看看能不能过。

后记:

   今天这个是开始训练以来最难以理解的一个算法了,不过之后肯定还有更加抽象的等着我,好好努力吧。

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

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

相关文章

DbSchema导出HTML/PDF版表结构

一、连接数据库 登录成功默认显示当前用户的所有资源&#xff08;表、视图、序列、方法、触发器等&#xff09;&#xff0c;如果不操作将导出此用户的全部信息。 至此连接数据库完成 二、表结构导出 本次不想给用户全部导出&#xff0c;只给导出几张&#xff0c;选择需要…

IPO观察丨“闷头做手机”的龙旗科技,如何拓宽价值边界?

提到手机代工&#xff0c;许多人会想起依靠iPhone订单发家的富士康。但近年来&#xff0c;随着国内智能手机供应链愈发成熟&#xff0c;龙旗科技、闻泰科技和华勤技术等一批国产手机代工厂快速崛起&#xff0c;业绩强劲增长之余&#xff0c;还迈进了二级市场。 比如&#xff0…

吴恩达deeplearning.ai:通过偏差与方差进行诊断

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 偏差与方差高偏差高方差合适的模型理解偏差与方差 总结 当你构建神经网络的时候&#xff0c;几乎没有人能够在一开始就将神经系统构建得十分完美。因此构建神经网络最重要的是直到…

BUGKU 头等舱

头等舱 打开环境&#xff0c;什么都没有&#xff0c;使用BP抓包&#xff0c;发送到重发器里&#xff0c;看响应得到flag

LeetCode 热题 100 | 图论(二)

目录 1 基础知识 1.1 什么是拓扑排序 1.2 如何进行拓扑排序 1.3 拓扑排序举例 2 207. 课程表 3 210. 课程表 II 菜鸟做题&#xff0c;语言是 C 1 基础知识 1.1 什么是拓扑排序 含义&#xff1a;根据节点之间的依赖关系来生成一个有序的序列。 应用&#xff1a…

详细了解C++中的namespace命名空间

键盘敲烂&#xff0c;月薪过万&#xff0c;同学们&#xff0c;加油呀&#xff01; 目录 键盘敲烂&#xff0c;月薪过万&#xff0c;同学们&#xff0c;加油呀&#xff01; 一、命名空间的理解 二、&#xff1a;&#xff1a;作用域运算符 三、命名空间&#xff08;namespace&…

勒索病毒最新变种.helper勒索病毒来袭,如何恢复受感染的数据?

尊敬的读者&#xff1a; 在数字时代&#xff0c;我们享受着科技带来的便利&#xff0c;但与此同时&#xff0c;网络安全威胁也在不断演变。其中&#xff0c;勒索病毒是一种极具破坏力的威胁&#xff0c;而.helper勒索病毒更是最新的变种之一。当你的文件被.helper勒索病毒加密…

SparkStreaming在实时处理的两个场景示例

简介 Spark Streaming是Apache Spark生态系统中的一个组件&#xff0c;用于实时流式数据处理。它提供了类似于Spark的API&#xff0c;使开发者可以使用相似的编程模型来处理实时数据流。 Spark Streaming的工作原理是将连续的数据流划分成小的批次&#xff0c;并将每个批次作…

redis04 发布与订阅

一种消息通信模式&#xff1a;发布者&#xff08;pub&#xff09;发布消息&#xff0c;订阅者&#xff08;sub&#xff09;接收消 息。 redis客户端可以订阅任意数量的频道。 发布订阅流程图 发布和订阅实现 打开两个窗口订阅channel1频道&#xff0c;再打开一个窗口向chan…

ssh连接github报错:ssh_exchange_identification: Connection closed by remote host

报错截图&#xff1a;ssh_exchange_identification: Connection closed by remote host 配置步骤&#xff1a; 生成新的 SSH 密钥并将其添加到 ssh-agent - GitHub 文档 这个报错是我在寒武纪MLU270的dcoker环境中遇到的&#xff0c;但是在windows系统中可以通过SSH的方式git…

Excel 按奇数偶数列处理数据

目录 一. 需求背景1.1 获取偶数列的数据1.2 奇偶列数据互换 二. 解决方式2.1 为列添加奇偶辅助列2.2 通过公式将奇偶列互换 一. 需求背景 1.1 获取偶数列的数据 ⏹ 最近在整理歌单&#xff0c;发现部分歌曲没有歌词&#xff0c;于是打算自己制作一份。 从网上找到了歌词&…

从下一代车规MCU厘清存储器的发展(1)

目录 1.车规MCU制程工艺朝28nm进发 2.MCU存储器概述 3.MCU大厂的选择 3.1 瑞萨自研STT-MRAM 3.2 ST专注PCM 3.3 英飞凌和台积电联手RRAM 3.4 NXP如何计划eNVM 4.小结 1.车规MCU制程工艺朝28nm进发 随着英飞凌发布了关于AURIX TC4xx系列即将量产的新闻&#xff0c;国际…

RS编码的FPGA实现

RS编码&#xff0c;即Reed-solomon codes&#xff0c;是一类纠错能力很强的特殊的非二进制BCH码&#xff08;BCH码是一种有限域中的线性分组码&#xff0c;具有纠正多个随机错误的能力&#xff09;。对于任选正整数S可构造一个相应的码长为nqS-1的 q进制BCH码&#xff0c;而q作…

机器学习,数学统计常用数学符号

通用字体&#xff0c;符号规则 x x x 标量 x \boldsymbol{x} x 向量 X \boldsymbol{X} X 随机向量、矩阵 χ \chi \quad χ 集合 x ^ \hat{x} x^ 估计或近似值 x ∗ x^* x∗ 最优值 x ˉ \bar{x} xˉ 平均值 常见的数学符号 ∀ \forall \quad ∀ 对任意 ∃ \exists ∃ 存在 ∝…

青少年CTF擂台挑战赛 2024 #Round 1 Web方向题解 WP 全

EasyMD5 题目描述&#xff1a;php没有难题 考点总结&#xff1a;脑洞题目&#xff0c;不如我出&#xff08;狗头 只允许两个都上传pdf文件。 文件还不能太大了。burp多次发包发现要求两个pdf内容不一样 不一样时候&#xff0c;提示我们MD5碰撞。 科学计数法绕过 PHP的后门 …

快递平台独立版小程序源码|带cps推广营销流量主+前端

源码介绍&#xff1a; 快递代发快递代寄寄件小程序可以对接易达云洋一级总代 快递小程序&#xff0c;接入云洋/易达物流接口&#xff0c;支持选择快递公司&#xff0c;三通一达&#xff0c;极兔&#xff0c;德邦等&#xff0c;功能成熟 如何收益: 1.对接第三方平台成本大约4元…

vscode如何远程到linux python venv虚拟环境开发?(python虚拟环境、vscode远程开发、vscode远程连接)

文章目录 1. 安装VSCode2. 安装扩展插件3. 配置SSH连接4. 输入用户名和密码5. 打开远程文件夹6. 创建/选择Python虚拟环境7. 安装Python插件 Visual Studio Code (VSCode) 提供了一种称为 Remote Development 的功能&#xff0c;允许用户在远程系统、容器或甚至 Windows 子系统…

Linux:kubernetes(k8s)node节点加入master主节点(3)

Linux&#xff1a;kubernetes&#xff08;k8s&#xff09;搭建mater节点&#xff08;kubeadm&#xff0c;kubectl&#xff0c;kubelet&#xff09;-CSDN博客https://blog.csdn.net/w14768855/article/details/136415575?spm1001.2014.3001.5502 我在上一章部署好了主节点&…

MySQL 数据库表设计和优化

一、数据结构设计 正确的数据结构设计对数据库的性能是非常重要的。 在设计数据表时&#xff0c;尽量遵循一下几点&#xff1a; 将数据分解为合适的表&#xff0c;每个表都应该有清晰定义的目的&#xff0c;避免将过多的数据存储在单个表中。使用适当的数据类型来存储数据&…

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:显隐控制)

控制组件是否可见。 说明&#xff1a; 从API Version 7开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 visibility visibility(value: Visibility) 控制组件的显隐。 卡片能力&#xff1a; 从API version 9开始&#xff0c;该接口支持在…