蓝桥杯倒计时 36天-DFS练习

文章目录

  • 飞机降落
  • 仙境诅咒
  • 小怂爱水洼
  • 串变换

飞机降落

在这里插入图片描述
在这里插入图片描述
思路:贪心+暴搜。

#include<bits/stdc++.h>

using namespace std;
const int N = 10;
int t,n;
//这题 N 比较小,可以用暴力搜搜复杂度是 T×N*N!
struct plane{
    int t,d,l;
}p[N];
bool vis[N];//用来记录每个飞机是否访问
bool dfs(int dep,int last){
    if(dep==n){//当枚举完所有飞机到叶子节点则说明有满足条件的情况。
        return true;//只要一个 true 所有都 true
    }
    
    for(int i=0;i<n;i++){//枚举每个飞机
        int t = p[i].t,d = p[i].d,l = p[i].l;
        if(!vis[i]&&t+d>=last){//没访问过并且上一架飞机将落后可以降落
            vis[i]=true;//标记访问
            if(dfs(dep+1,max(t,last)+l))return true;//需要判断极限条件是否成立
            vis[i]=false;//回溯还原
        }
    }
    return false;//只要一个 false 所有都 false
}

int main( ){
    cin>>t;
    while(t--){
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>p[i].t>>p[i].d>>p[i].l;
        }
        memset(vis, false, sizeof vis);//还原标志位
        if(dfs(0,0))puts("YES");
        else puts("NO");
    }
    return 0;
}

仙境诅咒

在这里插入图片描述
思路:图的 DFS

#include<bits/stdc++.h>
using namespace std;
int n,d;
const int N = 1e3+10;

struct god{
    int x,y;
}gods[N];//输入每个神仙的坐标

bool vis[N];//判断神仙是否中毒

double dis(int i,int j){//求两个神仙间的欧式距离
    int x1 = gods[i].x,x2 = gods[j].x;
    int y1 = gods[i].y,y2 = gods[j].y;
    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
//搜索以第 id 个中毒的神仙能感染周围哪些神仙
void dfs(int id){
    vis[id]=true;//标记第 id 个神仙中毒
    for(int i=0;i<n;i++){
        if(!vis[i]&&dis(id,i)<=d)dfs(i);//如果神仙没有搜索过,并且他在其他神仙的毒圈内,就需要以他为圆心进行搜索。
    }
}

int main( ){
    cin>>n;
    for(int i=0;i<n;i++)cin>>gods[i].x>>gods[i].y;
    cin>>d;
    dfs(0);
    for(int i=0;i<n;i++)cout<<(vis[i]?"1":"0")<<'\n';
    return 0;
}

小怂爱水洼

在这里插入图片描述
在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
const int N = 1e2+5;
int n,m;
int vis[N][N],a[N][N];
typedef long long LL;
int dy[4]={0,1,0,-1};
int dx[4]={1,0,-1,0};
//在同一片水洼内搜索
void dfs(int x,int y,LL &sum){
    //保存新水洼的水量,并且设置已经访问过
    sum += 1ll*a[x][y];
    vis[x][y] = true;
    //向水洼四周搜索
    for(int i=0;i<=3;i++){
        int nx = dx[i]+x;
        int ny = dy[i]+y;
        //不能越界,不能访问过,并且要有水量,否则跳过该坐标
        if(nx<=0||nx>=n+1||ny<=0||ny>=m+1||!a[nx][ny]||vis[nx][ny])continue;
        dfs(nx,ny,sum);
    }
}
int main( ){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];//输入矩阵
        }
    }
    long long result =0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            LL sum = 0;
            dfs(i,j,sum);//对每个大水洼进行求和,ij 是水洼坐标,sum 存每个大水洼的水量和
            result = max(result,sum);//result 是总的最大的水洼
        }
    }
    cout<<result;
    return 0;
}

串变换

在这里插入图片描述

在这里插入图片描述
思路:数据范围k 为 7 用暴搜做。

#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std;

const int N = 25;//数组的最大条件
int n,k;//串的长度为 n,操作次数 k
string s,t;//源串和目的串
int op[N],x[N],y[N];//操作数和操作码
vector<int> path;//用来存操作次序(全排列)
bool st[N];//用来记录是否访问过
bool res;//用来记录最后答案

void update(){
    //得到全排列的值进行操作看是否能得到目的串
    string str = s;
    for(int i=0;i<path.size();i++){
        int j = path[i];
        int a = op[j],b = x[j], c = y[j];
        if(a==1){
            str[b] = (str[b] - '0' + c) % 10 + '0';
        }else swap(str[b],str[c]);
    }
    res |= str==t;
}

void dfs(int u)
{
    if (u == k + 1)
    {
        update();
        return;
    }
    //全排列代码
    for (int i = 1; i <= k; ++ i )
        if (!st[i])
        {
            st[i] = true;
            path.push_back(i);
            dfs(u + 1);
            path.pop_back();
            st[i] = false;
        }
    //防止搜索一些值,叶节点没搜索到
    dfs(k + 1);
}
int main()
{
    cin >> n >> s >> t >> k;
    for (int i = 1; i <= k; ++ i )
        cin >> op[i] >> x[i] >> y[i];
    
    dfs(1);
    
    cout << (res? "Yes": "No") << endl;
    
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】文件操作篇-----程序文件和数据文件,文件的打开和关闭,二进制文件和文本文件,fopen,fclose【图文详解】

欢迎来CILMY23的博客喔&#xff0c;本篇为【C语言】文件操作篇-----程序文件和数据文件&#xff0c;文件的打开和关闭&#xff0c;二进制文件和文本文件【图文详解】&#xff0c;感谢观看&#xff0c;支持的可以给个一键三连&#xff0c;点赞关注收藏。 前言 在了解完动态内存管…

Visual Basic6.0零基础教学(1)—vb的介绍和布局及其小案例

Visual Basic6.0零基础教学(1) 文章目录 Visual Basic6.0零基础教学(1)前言一、vb6.0介绍二、vb的起源一、起源&#xff1a;Basic二、版本三、 Visual Basic6.0 三种版本&#xff1a;四、vb的特点 1.vb的布局介绍创建应用程序的步骤总结 前言 大家好,从今天开始我也会开始更新…

视频可回溯系统技术方案vue3+ts+tegg+mysql+redis+oss

一、 项目背景 保险、基金、银行等众多行业在做技术平台时都会需要一种能够准确了解用户操作行为的方式方法。诸如通过埋点、平台监控、视频可回溯等&#xff0c;通过技术手段&#xff0c;保存用户操作轨迹&#xff0c;以此规范安全销售、平台健康检查、出现纠纷时可追溯、问题…

python的scripts文件夹作用

Windows系统&#xff1a; Scripts文件夹通常位于Python的安装目录下&#xff0c;如C:\Python\Scripts。该文件夹内包含了各种有用的工具&#xff0c;例如pip、virtualenv等&#xff0c;这些工具有助于管理和配置Python环境和依赖包。 Linux系统&#xff1a; 在Linux系统中&…

vivado管理实施、

管理实施 Vivado设计套件包括各种设计流程&#xff0c;并支持一系列设计来源。为了生成可以下载到AMD设备上的比特流&#xff0c;设计必须通过实施。实现是采取逻辑网表并将其映射到物理网表的一系列步骤目标AMD设备的阵列。实施包括&#xff1a; •逻辑优化 •逻辑单元的放…

Django添加app

Django添加App python manage.py startapp [app_name]快速上手 注册app&#xff0c;setting.py 编写url和视图的对应关系 添加视图函数 命令行启动 python manage.py runserver页面模板

Windows下安装pip

一、下载pip 官网地址&#xff1a;https://pypi.org/project/pip/#files 1.1、pip工具查找方法 单击官网首页“PyPi”选项 在弹出来的搜索框中输入“pip” 选择最新的pip版本&#xff0c;点进去 下载pip安装包包 二、安装pip 解压“pip-24.0.tar.gz”&#xff0c;进…

AI绘画提示词案例(宠物

目录 1. 雪地猫猫&#xff1a;1.1 提示词&#xff1a;1.2 效果&#xff1a; 2. 趴地猫猫&#xff1a;2.1 提示词&#xff1a;2.2 效果&#xff1a; 3. 长城萨摩耶&#xff1a;3.1 提示词&#xff1a;3.2 效果&#xff1a; 4. 沙发猫猫&#xff1a;4.1 提示词&#xff1a;4.2 效…

Unity基础学习

目录 基础知识点3D数学——基础Mathf三角函数坐标系 3D数学——向量向量模长和单位向量向量的加减乘除向量点乘向量叉乘向量插值运算 3D数学——四元数为何使用四元数四元数是什么四元数常用方法四元数计算 MonoBehavior中的重要内容延迟函数协同程序协同程序原理 Resources资源…

Linux——权限的理解

Linux——权限的理解 文章目录 Linux——权限的理解一、shell命令以及运行原理二、Linux权限的概念切换用户对指令提权 三、Linux权限管理1. 文件访问者的分类&#xff08;人&#xff09;2. 文件类型和访问权限&#xff08;事物属性&#xff09;文件类型基本权限文件权限值的表…

准备系统运行的先决条件

知识点&#xff1a; 大数据基础环境准备 重 点&#xff1a; SSH免密码连接 安装配置JDK 安装配置Scala 项目开发测试环境为分布式集群环境&#xff0c;在当前项目中使用多台基于CentOS 64bit 的虚拟机来模拟生产环境。在生产环境中建议使用高性能物理主机或云主机搭建集…

el根据需求合并列

将 列分为 3 3 1 的格式 以下是vue代码&#xff1a; <el-table:data"dataSource":border"true":header-cell-style"{ font-weight: normal, text-align: center }":cell-style"{ text-align: center }"size"mini"style…

枚举赋值及强制转换问题

对枚举进行字符赋值&#xff0c;需要进行强制类型转换之后&#xff0c;才能得到想要的值&#xff0c;如下 typedef enum data {DIRECTION_X X,DIRECTION_Y Y,DIRECTION_Z Z,DIRECTION_T T }NumData;int main() {NumData numdata DIRECTION_Y;count <<"num is&…

消息服务--Kafka的简介和使用

消息服务--Kafka的简介和使用 前言异步解耦削峰缓存1、消息队列2、kafka工作原理3、springBoot KafKa整合3.1 添加插件3.2 kafKa的自动配置类3.21 配置kafka地址3.22 如果需要发送对象配置kafka值的序列化器3.3 测试发送消息3.31 在发送测试消息的时候由于是开发环境中会遇到的…

Vue+OpenLayers7入门到实战:OpenLayers7点聚合(聚散点)功能,地图缩小显示聚集数量,点击聚集点散开和地图放大后显示要素图片

返回《Vue+OpenLayers7》专栏目录:Vue+OpenLayers7入门到实战 前言 本章介绍如何使用OpenLayers7在地图上实现地图点聚合(聚散点)功能,实现地图缩小显示聚集数量,点击聚集点和地图放大后显示要素对应icon图片的功能。 二、依赖和使用 "ol": "7.5.2"…

计算机找不到msvcr120.dll的五种修复方法,轻松搞定msvcr120.dll丢失问题

当计算机系统中msvcr120.dll文件丢失时&#xff0c;可能会引发一系列运行问题和故障现象。msvcr120.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多Windows应用程序的正常运行至关重要。由于msvcr120.dll是许多软件在运行过程中依赖的重要动态链…

Pytest+Selenium UI自动化测试实战实例(全)

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 今天来说说pytest吧&#xff0c;经过几周的时间学习&#xff0c…

AI给开发经验3-5年的程序员的一些建议

Q: 你是一名CTO&#xff0c;请你给开发经验3-5年的程序员一些职业和生活方面的建议&#xff0c;1500字。 A: 作为一名有着丰富经验的CTO&#xff0c;我深知程序员在职业道路上的成长并非一帆风顺。针对开发经验在3-5年的程序员&#xff0c;我想从职业和生活两个方面&#xff0…

免费下载Corel Video Studio 2024-轻松创建令人惊叹的视频!

免费下载Corel Video Studio 2024-轻松创建令人惊叹的视频&#xff01; Corel Video Studio 2024免费下载Keygen 你厌倦了在视频编辑软件上花大钱吗&#xff1f;别再看了&#xff01;我们为您提供了完美的解决方案——Corel Video Studio 2024。最棒的部分是什么&#xff1f;…

webhook详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 webhook简介 在当今高度连接的网络世界中,没有什么可以孤立地发挥最佳作用。完成一项任务(几乎)总是需要多个实体的参与。电子商务应用程序需要与支付系统通信,支付…