ZISUOJ 数据结构--队列及其应用

news2024/9/27 15:28:09

说明:

        基本都是bfs的常见模板题型,思路都很直接,不过后面有两道题很搞心态,它们给的坐标x、y是反的,导致刚开始一直错。题目还是要看仔细,不能先入为主。

题目列表:

问题 A: 围圈报数(完善程序) 

参考题解:

#include<iostream>
#include<queue>
using namespace std;
int n,m,k=1,tmp;
queue<int> arr;
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
        arr.push(i);
        // _____(1)____//依次进入队列
        while(arr.size())
        // while(_____(2)_____)//判断队列里是否还有人
        {
            tmp=arr.front();
            if(k%m==0)
                cout<<tmp<<" ";
            else
                arr.push(tmp);
                // ______(3)______//如果不是第m个人,则重新入队
            // _____(4)_____//从队列里删除
            arr.pop();
            k++;
        }
    return 0;
}

问题 B: 围圈报数

参考题解:

#include <iostream>
#include <queue>
using std::cin;
using std::cout;
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int n,m,count = 0;cin >> n >> m;
    std::queue<int> q;
    for(int i = 1;i<=n;i++) q.push(i);
    while(q.size()){
        auto t = q.front();
        count++;
        if(count%m==0) {
            cout << t << ' ';
        }else {
            q.push(t);
        }
        q.pop();
    }
    cout << std::endl;
    return 0;
}

问题 C: 报数相同次数circle

参考题解:

#include <iostream>
#include <queue>
using std::cin;
using std::cout;
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int n;cin >> n;
    int a,b;cin >> a >> b;
    std::queue<int> q1,q2;
    for(int i = 1;i<=a;i++) q1.push(i);
    for(int i = 1;i<=b;i++) q2.push(i);
    int count = 0;
    for(int i = 1;i<=n;i++) {
        auto t1 = q1.front(),t2 = q2.front();
        if(t1==t2) count++;
        q1.push(t1),q2.push(t2);
        q1.pop(),q2.pop();
    }
    cout << count << std::endl;
    return 0;
}

问题 D: 最小倍数

参考题解:

#include <iostream>
#include <queue>
using std::cin;
using std::cout;
using ll = long long;
ll n,x;
void bfs() {
    std::queue<ll> q;
    q.push(1);
    while(q.size()) {
        x = q.front();q.pop();
        if(x%n==0&&x>=n) {
            cout << x << '\n';
            return;
        }
        q.push(x*10);
        q.push(x*10+1);
    }
    cout << x << '\n';
}
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    while(cin >> n,n) {
        bfs();
    }
    return 0;
}

问题 E: 迷宫的最短路径

参考题解:

#include <iostream>
#include <queue>
#include <cstring>
using std::cin;
using std::cout;
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    constexpr int N = 1e2+5;
    int sx = 1,sy = 1,ex = 1,ey = 1;
    struct node {
        int x,y,s;
    }t,t1;
    char g[N][N];
    bool vis[N][N];
    memset(vis,false,sizeof vis);
    int dx[] = {0,0,-1,1};
    int dy[] = {-1,1,0,0};
    std::queue<node> q;
    int n,m;cin >> n >> m;
    for(int i = 1;i<=n;i++) {
        for(int j = 1;j<=m;j++) {
            cin >> g[i][j];
            if(g[i][j]=='S') {
                sx=i,sy=j;
            }else if(g[i][j]=='G') {
                ex=i,ey=j;
            }
        }
    }
    auto bfs = [&]()->void{
        t.x = sx,t.y = sy,t.s = 0;
        q.push(t);
        vis[sx][sy] = true;
        while(!q.empty()) {
            t = q.front();q.pop();
            if(t.x==ex&&t.y==ey) {
                cout << "The min steps are:" << t.s << "!\n";
                return;
            }
            for(int i = 0;i<4;i++) {
                int u = t.x+dx[i],v = t.y+dy[i];
                if(u<1||u>n||v<1||v>m||vis[u][v]||g[u][v]=='#') continue;
                vis[u][v] = true;
                t1.x = u,t1.y = v,t1.s = t.s+1;
                q.push(t1);
            }
        }
        cout << "sorry!\n";
    };
    bfs();
    return 0;
}

问题 F: 象棋中的马之进阶

参考题解:

#include <iostream>
#include <queue>
#include <cstring>
using std::cin;
using std::cout;
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    constexpr int N = 15;
    struct node {
        int x,y,s;
    }t,t1;
    int dx[] = {-1,1,2,2,1,-1,-2,-2};
    int dy[] = {2,2,1,-1,-2,-2,-1,1};
    int sx,sy,ex,ey;
    bool vis[N][N];
    memset(vis,false,sizeof vis);
    cin >> sy >> sx >> ey >> ex;
    std::queue<node> q;
    auto bfs = [&]() ->void {
        t.x = sx,t.y = sy,t.s = 0;
        vis[sx][sy] = true;
        q.push(t);
        while(!q.empty()) {
            t = q.front();q.pop();
            if(t.x==ex&&t.y==ey) {
                cout << t.s << std::endl;
                return;
            }
            for(int i = 0;i<8;i++) {
                int u = t.x+dx[i],v = t.y+dy[i];
                if(u<1||u>10||v<1||v>9||vis[u][v]) continue;
                vis[u][v] = true;
                t1.x = u,t1.y = v,t1.s = t.s+1;
                q.push(t1);
            }
        }
        cout << 0 << std::endl;
    };
    bfs();
    return 0;
}

 

问题 G: 迷宫探险

参考题解:

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
using std::cin;
using std::cout;
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    constexpr int N = 1e2+5;
    struct node {
        int x,y,s;
        bool operator > (const node &W) const {
            return s > W.s;
        }
    }t,t1;
    char g[N][N];
    bool vis[N][N];
    int dx[] = {0,0,-1,1};
    int dy[] = {-1,1,0,0};
    int n,sx = 1,sy = 1,ex = 1,ey = 1;
    std::priority_queue<node,std::vector<node>,std::greater<node>> pq;
    auto bfs = [&]() ->void {
        while(!pq.empty()) pq.pop();
        memset(vis,false,sizeof vis);
        t.x = sx,t.y = sy,t.s = 0;
        vis[sx][sy] = true;
        pq.push(t);
        while(!pq.empty()) {
            t = pq.top();pq.pop();
            if(t.x==ex&&t.y==ey) {
                cout << t.s << '\n';
                return;
            }
            for(int i = 0;i<4;i++) {
                int u = t.x+dx[i],v = t.y+dy[i];
                if(u<1||u>n||v<1||v>n||vis[u][v]||g[u][v]=='#') continue;
                vis[u][v] = true;
                int ds = 1;
                if(g[u][v]!='.') ds += int(g[u][v]^48);
                t1.x = u,t1.y = v,t1.s = t.s+ds;
                pq.push(t1);
            }
        }
        cout << -1 << '\n';
    };
    while(cin >> n) {
        ex = n,ey = n;
        for(int i = 1;i<=n;i++) {
            for(int j = 1;j<=n;j++) {
                cin >> g[i][j];
            }
        }
        bfs();
    }
    return 0;
}

问题 H: 迷宫

 

参考题解:

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>
using std::cin;
using std::cout;
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    constexpr int N = 1e2+5;
    struct node {
        int x,y,s;
    }t,t1;
    char g[N][N];
    bool vis[N][N];
    int dx[] = {0,0,-1,1};
    int dy[] = {-1,1,0,0};
    int sx,sy,ex,ey,k,n,m;
    std::queue<node> q;
    auto bfs = [&]()->void {
        memset(vis,false,sizeof vis);
        while(!q.empty()) q.pop();
        t.x = sx,t.y = sy,t.s = -1;
        vis[sx][sy] = true;
        q.push(t);
        while(!q.empty()) {
            t = q.front();q.pop();
            if(t.x==ex&&t.y==ey&&t.s<=k) {
                cout << "yes\n";
                return;
            }
            for(int i = 0;i<4;i++) {
                t1.x = t.x+dx[i],t1.y = t.y+dy[i];
                int &u = t1.x,&v = t1.y;
                while(u>=1&&u<=n&&v>=1&&v<=m&&g[u][v]=='.') {
                    if(!vis[u][v]) {
                        t1.s=t.s+1;
                        vis[u][v] = true;
                        q.push(t1);
                    }
                    u+=dx[i],v+=dy[i];
                }
            }
        }
        cout << "no\n";
    };
    int T = 1;cin >> T;
    while(T--) {
        cin >> n >> m;
        for(int i = 1;i<=n;i++) {
            for(int j = 1;j<=m;j++) {
                cin >> g[i][j];
            }
        }
        cin >> k >> sy >> sx >> ey >> ex;
        bfs();
    }
    return 0;
}

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

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

相关文章

Python实现对波士顿房价的分析与预测

文章目录 问题分析所需环境代码实现1. 相关性分析及可视化2. 房价分析及可视化3. 构建房价预测模型问题分析 波士顿房价数据集包含美国人口普查局收集的美国马萨诸塞州波士顿住房价格的有关信息, 数据集很小,只有506个案例。 数据集都有以下14个属性,具体含义如下 现在需要…

工业控制(ICS)---组态软件分析

组态软件 什么是组态软件&#xff1f; 组态软件就是一些数据采集与过程控制的专用软件&#xff0c;它们是在自动控制系统监控层一级的软件平台和开发环境&#xff0c;使用灵活的组态方式&#xff0c;为用户提供快速构建工业自动控制系统监控功能的通用层次的软件工具。 组态软…

轮转数组(Leedcode)的题目

题目&#xff1a;给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步…

恶心透了的小日子,害人终害己,国货呼吁关注抵制日本核废水排放

​|日本排放核废水 日本政府决定将福岛第一核电站的核污染水经过处理后排放入海&#xff0c;这一决定引发了多方面的担忧和反对&#xff0c;特别是在周边国家&#xff0c;包括中国和韩国。关于日本排放核污染水这一新闻事件&#xff0c;我们必须首先认识到&#xff0c;核能利用…

二百三十三、Flume——Flume采集JSON文件到Kafka,再用Flume采集Kafka数据到HDFS中

一、目的 由于使用了新的Kafka协议&#xff0c;因为根据新的协议推送模拟数据到Kafka中&#xff0c;再Flume采集Kafka数据到HDFS中 二、技术选型 &#xff08;一&#xff09;Kettle工具 准备使用Kettle的JSON input控件和Kafka producer控件&#xff0c;但是搞了1天没搞定&…

《自动机理论、语言和计算导论》阅读笔记:p261-p314

《自动机理论、语言和计算导论》学习第 10 天&#xff0c;p261-p314总结&#xff0c;总计 48 页。 一、技术总结 1.generating & reachable 2.Chomsky Normal Form(CNF) 乔姆斯基范式。 3.pumping lemma 泵作用引理。引理&#xff1a;引理是数学中为了取得某个更好的…

基于docker搭建瀚高数据库HighGo6.0.1【图文】

基于docker搭建瀚高数据库HighGo6.0.1 拉取镜像启动验证进入容器 登录数据库查看数据库加密方式修改加密方式为sm3进入数据库修改密码重启容器 数据库验证数据库密码到期参考 docker部署 https://blog.csdn.net/weixin_44385419/article/details/127738868 拉取镜像 docker p…

【ARM Trace32(劳特巴赫) 使用介绍 12.1 -- Trace32 读写 64位地址】

请阅读【Trace32 ARM 专栏导读】 文章目录 Trace32 读写 64位地址读 64 位地址写64位地址Trace32 读写 64位地址 在使用TRACE32进行调试时,有时需要读取或操作64位的地址,特别是在处理64位的处理器或操作系统时。以下是如何在TRACE32中读取64位地址的一般方法。 读 64 位地…

数据可视化(八):Pandas时间序列——动态绘图,重采样,自相关图,偏相关图等高级操作

Tips&#xff1a;"分享是快乐的源泉&#x1f4a7;&#xff0c;在我的博客里&#xff0c;不仅有知识的海洋&#x1f30a;&#xff0c;还有满满的正能量加持&#x1f4aa;&#xff0c;快来和我一起分享这份快乐吧&#x1f60a;&#xff01; 喜欢我的博客的话&#xff0c;记得…

IPD集成产品开发(二)

时间&#xff1a;2024年04月21日 作者&#xff1a;小蒋聊技术 邮箱&#xff1a;wei_wei10163.com 微信&#xff1a;wei_wei10 音频地址&#xff1a;IPD集成产品开发&#xff08;二&#xff09;https://www.ximalaya.com/sound/724309598 大家好&#xff0c;欢迎来到小蒋聊技…

前端三剑客 HTML+CSS+JavaScript ③ HTML标准结构

生活没有任何意义&#xff0c;这就是活着的理由&#xff0c;而且是唯一的理由 —— 24.4.22 一、HTML注释 1.特点 注释的内容会被浏览器所忽略&#xff0c;不会呈现到页面中&#xff0c;但源代码中依然可见 2.作用 对代码进行解释和说明 3.写法 <!-- xxxxx --> <html&…

【Web】2022DASCTF X SU 三月春季挑战赛 题解(全)

目录 ezpop calc upgdstore ezpop 瞪眼看链子 fin#__destruct -> what#__toString -> fin.run() -> crow#__invoke -> fin#__call -> mix.get_flag() exp <?php class crow {public $v1;public $v2;}class fin {public $f1; }class what {public $a; }…

grafana安装篇(1)

目录 grafana概念&#xff1a; 它具有以下主要特点&#xff1a; Grafana 常用于以下场景&#xff1a; 环境介绍&#xff1a; 前置环境&#xff1a; (1)保证可以连接外网 (2)防火墙和selinux已关闭 1.下载安装grafana10.0.1-1rpm包 2.启动grafana 3.浏览器访问 3.设置…

android学习笔记(五)-MVP模式

1、MVP模式demo的实现&#xff0c;效果下&#xff1a; 2、创建一个Fruit类&#xff1a; package com.example.listview; //Fruit类就是Model&#xff0c;表示应用程序中的数据对象。 public class Fruit {private int imageId;private String name;private String price;publi…

TFTLCD原理硬件介绍

介绍 TFT LCD&#xff08;薄膜晶体管液晶显示器&#xff09;是一种广泛使用的显示技术&#xff0c;它结合了薄膜晶体管&#xff08;TFT&#xff09;和液晶显示&#xff08;LCD&#xff09;技术。TFT LCD的主要特点是使用TFT矩阵来控制施加到每个像素的电压&#xff0c;从而实现…

上位机图像处理和嵌入式模块部署(树莓派4b使用pcl点云库)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 图像处理&#xff0c;大家都知道它有显著的优点和缺点。优点就是分辨率高&#xff0c;信息丰富。缺点就是&#xff0c;整个图像本身没有深度信息。…

京东商品详情数据采集API接口|附京东商品数据返回PHP多语言高并发

京东获得JD商品详情 API 返回值说明 item_get-获得JD商品详情 API测试 注册开通 jd.item_get 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址…

扫描工具nmap

介绍 说到黑客&#xff0c;知识就是力量。您对目标系统或网络的了解越多&#xff0c;可用的选项就越多。因此&#xff0c;在进行任何利用尝试之前&#xff0c;必须进行适当的枚举。 假设我们获得了一个 IP&#xff08;或多个 IP 地址&#xff09;来执行安全审计。在我们做任何…

Linux使用Docker部署DashDot访问本地服务器面板

文章目录 1. 本地环境检查1.1 安装docker1.2 下载Dashdot镜像 2. 部署DashDot应用 本篇文章我们将使用Docker在本地部署DashDot服务器仪表盘&#xff0c;并且结合cpolar内网穿透工具可以实现公网实时监测服务器系统、处理器、内存、存储、网络、显卡等&#xff0c;并且拥有API接…

牛客NC233 加起来和为目标值的组合(四)【中等 DFS C++、Java、Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/7a64b6a6cf2e4e88a0a73af0a967a82b 解法 dfs参考答案C class Solution {public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可*** param nums int整型…