2024/1/18 DFS BFS

目录

奇怪的电梯

马的遍历

 PERKET(个人认为很抽象)


奇怪的电梯

P1135 奇怪的电梯 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路,还是用的bfs,建立一个结构体类型的队列,一个存当前的电梯层数,一个存当前走的步数

还要建一个bool类型的数组标记当前电梯层数是否走过

完整代码

#include <bits/stdc++.h>
const int N = 210;
int n,a,b;
int g[N];
int ans;
bool vis[N]{};
struct node
{
    int lou;
    int step;
};
void bfs()
{
    std::queue<node> q;
    q.push({a,0});
    while(!q.empty())
    {
        node tmp=q.front();
        q.pop();
        int cur_low=tmp.lou,cur_step=tmp.step;
        if(cur_low==b)
        {
            std::cout<<cur_step;
            return;
        }
        if(cur_low+g[cur_low]<=n&&vis[cur_low+g[cur_low]]==false)
        {
            q.push({cur_low+g[cur_low],cur_step+1});
            vis[cur_low+g[cur_low]]=true;
        }
        if(cur_low-g[cur_low]>=1&&vis[cur_low-g[cur_low]]==false)
        {
            q.push({cur_low-g[cur_low],cur_step+1});
            vis[cur_low-g[cur_low]]=true;
        }
    }
    std::cout<<-1;
}
int main()
{
    std::cin >> n >> a >> b;
    for(int i = 1;i <= n;i ++)
    {
        std::cin >> g[i];
    }
    bfs();
    return 0;
}

马的遍历

P1443 马的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:用bfs,八个坐标,依次遍历 ,没有搜索到的点就输出-1

超时代码:

#include <bits/stdc++.h>
const int N = 410;
int n,m,x,y;
int g[N][N];
bool vis[N][N]{};
int rr[10]={-1,-2,-2,-1,1,2,2,1};
int cc[10]={-2,-1,1,2,2,1,-1,-2};
struct node
{
    int r,c,step;
};
void bfs(int ii,int jj)
{
    std::queue<node> q;
    q.push({x,y,0});
    memset(vis,false,sizeof(vis));
    while(!q.empty())
    {
        node tmp=q.front();
        q.pop();
        int cur_r=tmp.r,cur_c=tmp.c,cur_step=tmp.step;
        if(cur_r==ii&&cur_c==jj)
        {
            std::cout<<cur_step<<" ";
            return;
        }
        for(int i = 0;i < 8;i ++)
        {
            int next_r=cur_r+rr[i];
            int next_c=cur_c+cc[i];
            if(next_r>=1&&next_r<=n&&next_c>=1&&next_c<=m&&vis[next_r][next_c]==false)
            {
                q.push({next_r,next_c,cur_step+1});
                vis[next_r][next_c]=true;
            }
        }
    }
    std::cout<<-1<<" ";
}
int main()
{
    std::cin >> n >> m >> x >> y;
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 1;j <= m;j ++)
        {
            bfs(i,j);
        }
        std::cout<<"\n";
    }
    return 0;
}

 

因为每次都要进一次bfs,所以时间复杂度就提高了

所以只需要进一次bfs,用一个二维数组记录到达每个点的步数(因为要走下一个点必然会经过当前这个点)

ac代码

#include <bits/stdc++.h>
const int N = 410;
int n,m,x,y;
int g[N][N];
bool vis[N][N]{};
int rr[10]={-1,-2,-2,-1,1,2,2,1};
int cc[10]={-2,-1,1,2,2,1,-1,-2};
int ans[N][N];
struct node
{
    int r,c,step;
};
void bfs()
{
    memset(ans,-1,sizeof(ans));
    std::queue<node> q;
    q.push({x,y,0});
    memset(vis,false,sizeof(vis));
    vis[x][y]=true;
    while(!q.empty())
    {
        node tmp=q.front();
        q.pop();
        int cur_r=tmp.r,cur_c=tmp.c,cur_step=tmp.step;
        ans[cur_r][cur_c]=cur_step;
        for(int i = 0;i < 8;i ++)
        {
            int next_r=cur_r+rr[i];
            int next_c=cur_c+cc[i];
            if(next_r>=1&&next_r<=n&&next_c>=1&&next_c<=m&&vis[next_r][next_c]==false)
            {
                q.push({next_r,next_c,cur_step+1});
                vis[next_r][next_c]=true;
            }
        }
    }
}
int main()
{
    std::cin >> n >> m >> x >> y;
    bfs();
    for(int i = 1;i <= n;i ++)
    {
        for(int j = 1;j <= m;j ++)
        {
           std::cout<<ans[i][j]<<" ";
        }
        std::cout<<"\n";
    }
    return 0;
}

 

 PERKET(个人认为很抽象)

P2036 [COCI 2008/2009 #2] PERKET - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

思路:这道题用dfs,枚举选和不选两种状态,取最小值

完整代码

#include <bits/stdc++.h>
const int N = 15;
int a[N],b[N];
int n,ans=999999999;
void dfs(int i,int x,int y)//编号,酸度,甜度
{
    if(i>n)
    {
        if(x==1&&y==0)
            return;
        ans=std::min(std::abs(x-y),ans);
        return;
    }
    dfs(i+1,x*a[i],y+b[i]);
    dfs(i+1,x,y);
}
int main()
{
    std::cin >> n;
    for(int i = 1;i <= n;i ++)
    {
        std::cin >> a[i] >> b[i];
    }
    dfs(1,1,0);
    std::cout<<ans<<"\n";
    return 0;
}

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

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

相关文章

如何服务器用守护进程保证程序稳定运行

如何服务器用守护进程保证程序稳定运行 一、前言 平常在使用服务器的时候&#xff0c;服务一直不稳定&#xff0c;遂从nohup改为创建一个systemd服务来管理Python程序。 要求&#xff1a;有root权限 二、步骤 1、创建systemd服务文件 创建一个新的systemd服务文件&#xf…

操作系统-操作系统的运行机制(内核程序 应用程序 特权指令 非特权指令 内核态 用户态 变态)

文章目录 总览预备知识&#xff1a;程序是如何运行的&#xff1f;内核程序vs应用程序特权指令vs非特权指令内核态vs用户态用户态&#xff0c;内核态的切换小结 总览 预备知识&#xff1a;程序是如何运行的&#xff1f; 转换为机器码放入内存&#xff0c;然后按顺序执行 内核…

c JPEG 1D DCT 优化二(AAN)

这两个图可能就是AAN 的数学模型 优化DCT就是用代码实现矩阵9,10 9和10已经把64个系数缩小到一半32个了。光从这两图可看出&#xff0c;优化后乘法少了64-32436个&#xff0c;加法少了64-32-824。估计优化时间可少百分之40左右。 实际编码640480 的图片&#xff0c;程序执行时…

MySQL窗口函数(MySQL Window Functions)

1、窗口函数基本概念 官网地址&#xff1a;https://dev.mysql.com/doc/refman/8.0/en/window-functions.html 窗口可以理解为 记录集合&#xff0c;窗口函数就是在满足某种条件的记录集合上执行的特殊函数。 即&#xff1a;每条记录都要在此窗口内执行函数。 静态窗口&#x…

多目标优化中常用的差分进化算法DE【2】

# 多目标优化中常用的进化算法 1、链接一 2、链接二 #后续继续补充多目标的差分进化算法MODE的应用 此链接介绍很详细&#xff0c;此处用来分享学习&#xff0c;后续有问题会继续进行补充。 如果你觉得不错&#xff0c;佛系随缘打赏&#xff0c;感谢&#xff0c;你的支持是…

「完美世界」石昊融合仙金化真龙,八九天功小成,借天时斩杀真神

Hello,小伙伴们&#xff0c;我是拾荒君。 国漫《完美世界》第146期超前爆料&#xff0c;据透露石昊从天人族手中意外夺得一件名为“仙金”的神秘宝物。这件宝物颇具灵性&#xff0c;令石昊十分好奇。而令人震惊的是&#xff0c;这仙金竟然能够承受齐道临的一击。齐道临透露&am…

HackTheBox - Medium - Linux - Health

Health Health 是一台中型 Linux 计算机&#xff0c;在主网页上存在 SSRF 漏洞&#xff0c;可利用该漏洞访问仅在 localhost 上可用的服务。更具体地说&#xff0c;Gogs 实例只能通过 localhost 访问&#xff0c;并且此特定版本容易受到 SQL 注入攻击。由于攻击者可以与 Gogs …

我在阿里巴巴是是这样做架构师的

阿里巴巴是杭州的标志性大型互联网公司&#xff0c;也是中国做电商最成功的企业&#xff0c;几乎所有玩电商的都是以阿里巴巴为权威机构&#xff0c;当然这个只是在国内是这样的&#xff0c;那么国外还是有很强的竞争对手的&#xff0c;比如亚马逊。 那么作为一名资深的架构师…

JavaScript DOM可以做什么?

1、通过id获取标签元素 DOM是文档对象模型&#xff0c;它提供了一些属性和方法来方便我们操作document对象&#xff0c;比如getElementById()方法可以通过某个标签元素的id来获取这个标签元素 // 用法 window.document.getElementById(id); // 例子 <!DOCTYPE html> &l…

C#MQTT编程07--MQTT服务器和客户端(wpf版)

1、前言 上篇完成了winform版的mqtt服务器和客户端&#xff0c;实现了订阅和发布&#xff0c;效果666&#xff0c;长这样 这节要做的wpf版&#xff0c;长这样&#xff0c;效果也是帅BBBB帅&#xff0c;wpf技术是cs程序软件的福音。 wpf的基础知识和案例项目可以看我的另一个专…

Zookeeper安装教程

系列文章目录 Zookeeper简介 文章目录 前言一、选择安装包二、使用wget下载并安装zookeeper 前言 Linux下Zookeeper安装步骤 一、选择安装包 Zookeeper下载地址&#xff1a;https://zookeeper.apache.org/releases.html 选择一个稳定版本即可&#xff0c;我这里选择的是3.7.2…

微服务-服务拆分和远程调用

任何分布式架构都离不开服务的拆分&#xff0c;微服务也是一样。 一、服务拆分原则 微服务拆分时的几个原则&#xff1a; 不同微服务&#xff0c;不要重复开发相同业务 微服务数据独立&#xff0c;不要访问其它微服务的数据库 微服务可以将自己的业务暴露为接口&#xff0c;…

C++ 数论相关题目(约数)

1、试除法求约数 主要还是可以成对的求约数进行优化&#xff0c;不然会超时。 时间复杂度根号n #include <iostream> #include <vector> #include <algorithm>using namespace std;int n;vector<int> solve(int a) {vector<int> res;for(int i…

系统性学习vue-vuex

系统性学习vue-vuex 理解vuexvuex工作原理搭建vuex环境案例Vuex的开发者工具使用getters配置项mapState与mapGettersmapActions和mapMutationsvuex模块化namespace 理解vuex 概念&#xff1a; 专门在Vue中实现集中式状态&#xff08;数据&#xff09;管理的一个Vue插件&#xf…

GIS复试Tips(特别是南师大)

注&#xff1a;本文仅个人观点&#xff0c;仅供参考 在这提前㊗️24年考南师大GISer成功上岸&#xff01; 当然&#xff0c;考研是个考试&#xff0c;总有人顺利上岸&#xff0c;稳上岸或逆袭上岸&#xff0c;但可能也有人被刷&#xff0c;这是常态。 所以&#xff0c;㊗️你…

RHCE作业

网站需求&#xff1a; 题目一&#xff1a; 基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! 配置&#xff1a; 1&#xff0c;关闭防护墙&#xff0c;关闭selinux [rootnodel ~]# systemctl stop firewalld [rootnodel ~]# se…

TEE2024大湾区进出口贸易博览会

TEE2024大湾区进出口贸易博览会 INTE 2024RNATIONAL TRADE E-COMMERCE EXPO 时间&#xff1a;2024年08月11--13日 地点&#xff1a;深圳福田会展中心 联合主办&#xff1a; 深圳市电子商务协会 深圳市跨境电子商务行业发展促进会 广东进出口商会 广东省国牌出海电子商务…

Qt/QML编程之路:OpenGL的示例(39)

Qt编程之后,会发现有版本问题,有时候一个示例不同的版本下可能会跑不同,有些Qt5跑不同Qt6已经完善,可以跑通。 我就看到有个关于OpenGL的示例: 这个示例是演示怎么基于OpenGL编程的,但是调试时却发现glViewXXX等gl打头的函数说找不到reference,或者什么link不上之类的错…

ffmpeg 常用命令行详解

概述 ffmpeg 是一个命令行音视频后期处理软件 1. 裁剪命令 参数说明 -i 文件&#xff0c;orgin.mp3 为待处理源文件-ss 裁剪时间&#xff0c;后跟裁剪开始时间&#xff0c;或者开始的秒数-t 裁剪时间output.mp3 为处理结果文件 ffmpeg -i organ.mp3 -ss 00:00:xx -t 120 o…

轻松一刻 浅休息下哈

yum -y install epel-release yum install -y linux_logo cal 此命令以日历表的方式显示日期 curl http://wttr.in 此网站进行在屏幕上面显示天气情况