学习总结2
解题思路
用bfs进行搜索,标记A罐B罐所保存的水的出现情况,当再次出现的时候停止搜索,然后用数组模拟链表进行保存路径.最后输出.
代码
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
int g[120][120];
struct s
{int x;int y;
}d[120*120];
int l,r;
struct ss
{int x;int y;int z;
}j[120][120];
int a,b,c;
int k,i;
int bfs()
{int tx,ty,z;while(l<r){for(z=0;z<6;z++){tx=d[l].x;ty=d[l].y;switch(z){case 0:tx=a;break;case 1:ty=b;break;case 2:tx=0;break;case 3:ty=0;break;case 4:if(tx!=0){if(tx+ty<=b){ty=tx+ty;tx=0;}else{tx=tx-(b-ty);ty=b;}}break;case 5:if(ty!=0){if(tx+ty<=a){tx=ty+tx;ty=0;}else{ty=ty-(a-tx);tx=a;}}break;}if(tx>a||ty>b||tx<0||ty<0)continue;if(tx==c||ty==c){k=tx;i=ty;j[k][i].x=d[l].x;j[k][i].y=d[l].y;j[k][i].z=z;g[tx][ty]=g[d[l].x][d[l].y]+1;return 0;}if(g[tx][ty]==-1){g[tx][ty]=g[d[l].x][d[l].y]+1;d[r].x=tx;d[r++].y=ty;j[tx][ty].x=d[l].x;j[tx][ty].y=d[l].y;j[tx][ty].z=z;}}l++;}return 0;
}void print(int x,int y)
{if(x==0&&y==0)return ;print(j[x][y].x,j[x][y].y);switch(j[x][y].z){case 0:printf("FILL(1)\n");break;case 1:printf("FILL(2)\n");break;case 2:printf("DROP(1)\n");break;case 3:printf("DROP(2)\n");break;case 4:printf("POUR(1,2)\n");break;case 5:printf("POUR(2,1)\n");break;}return ;
}int main()
{scanf("%d%d%d",&a,&b,&c);d[r].x=0;d[r++].y=0;memset(g,-1,sizeof(int )*120*120);g[0][0]=0;bfs();if(k==0&&i==0){printf("impossible\n");}else{printf("%d\n",g[k][i]);print(k,i);}return 0;
}
解题思路
这道题用bfs就行了.以两个人为起点对全图进行搜索,用一个数组保存到每一个地方所用的最短的步数.最后比较两人到所有的kfc所用的步数的总和输出最小的就行了.
代码
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
char g[210][210];
int j[210][210];
int j2[210][210];
int ne[5][2]={{1,0},{-1,0},{0,1},{0,-1}};
int n,m;
struct di
{int x;int y;
}sy,sm,kfc[210*210],dl[210*210];
int l,r;
int k;
int sum;int bfs()
{int tx,ty,z;while(l<r){for(z=0;z<4;z++){tx=ne[z][0]+dl[l].x;ty=ne[z][1]+dl[l].y;if(tx<0||tx>n||ty<0||ty>m)continue;if(g[tx][ty]!='#'&&j[tx][ty]==0){j[tx][ty]=j[dl[l].x][dl[l].y]+1;dl[r].x=tx;dl[r++].y=ty;}}l++;}return 0;
}int bfs2()
{int tx,ty,z;while(l<r){for(z=0;z<4;z++){tx=ne[z][0]+dl[l].x;ty=ne[z][1]+dl[l].y;if(tx<0||tx>n||ty<0||ty>m)continue;if(g[tx][ty]!='#'&&j2[tx][ty]==0){j2[tx][ty]=j2[dl[l].x][dl[l].y]+1;dl[r].x=tx;dl[r++].y=ty;}}l++;}return 0;
}int main()
{int x,y,s;while(~scanf("%d%d",&n,&m)){sum=9999999;k=0;for(x=0;x<n;x++){scanf("%s",g[x]);}for(x=0;x<n;x++){for(y=0;y<m;y++){if(g[x][y]=='Y'){sy.x=x;sy.y=y;}if(g[x][y]=='M'){sm.x=x;sm.y=y;}if(g[x][y]=='@'){kfc[k].x=x;kfc[k++].y=y;}}}memset(j,0,sizeof(int)*210*210);l=0;r=0;dl[r].x=sy.x;dl[r++].y=sy.y;bfs();memset(j2,0,sizeof(int)*210*210);l=0;r=0;dl[r].x=sm.x;dl[r++].y=sm.y;bfs2();for(x=0;x<k;x++){if(j[kfc[x].x][kfc[x].y]!=0&&j2[kfc[x].x][kfc[x].y]!=0)if((j[kfc[x].x][kfc[x].y]+j2[kfc[x].x][kfc[x].y])<sum)sum=j[kfc[x].x][kfc[x].y]+j2[kfc[x].x][kfc[x].y];}printf("%d\n",sum*11);}return 0;
}
解题思路
用bfs搜索,要注意的是地图是三维的,传送到下一层之后可能的情况(直接见到公主,撞死,进入另一个传送门).
代码
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
using namespace std;
char g[3][15][15];
int j[3][15][15];
struct ss
{int x;int y;int z;
}d[15*15*3];
int ne[5][2]={{1,0},{-1,0},{0,1},{0,-1}};
int l,r;
int n,m,t;
int bfs()
{int z,tx,ty,tz;while(l<r){for(int z=0;z<4;z++){tx=d[l].x+ne[z][0];ty=d[l].y+ne[z][1];tz=d[l].z;if(tx<0||ty<0||tx>=n||ty>=m)continue;if(g[tz][tx][ty]=='P'){return j[tz][tx][ty]=j[d[l].z][d[l].x][d[l].y]+1;}if(g[tz][tx][ty]!='*'&&j[tz][tx][ty]==-1){j[tz][tx][ty]=j[d[l].z][d[l].x][d[l].y]+1;if(g[tz][tx][ty]=='#'){if(tz==0){tz++;}else{tz--;}if(g[tz][tx][ty]=='#'||j[tz][tx][ty]!=-1){if(tz==0){tz++;}else{tz--;}continue;}if(g[tz][tx][ty]=='*'||j[tz][tx][ty]!=-1){if(tz==0){tz++;}else{tz--;}continue;}if(g[tz][tx][ty]=='P'){return j[tz][tx][ty]=j[d[l].z][d[l].x][d[l].y]+1;}j[tz][tx][ty]=j[d[l].z][d[l].x][d[l].y]+1;}d[r].x=tx;d[r].y=ty;d[r++].z=tz;}}l++;}return 999999;
}
int main()
{int k;scanf("%d",&k);for(int z=0;z<k;z++){memset(j,-1,sizeof(int )*3*15*15);l=r=0;scanf("%d%d%d",&n,&m,&t);for(int x=0;x<n;x++){scanf("%s",g[0][x]);}getchar();for(int x=0;x<n;x++){scanf("%s",g[1][x]);}d[r].x=0;d[r].y=0;d[r++].z=0;j[0][0][0]=0;int sum=bfs();if(sum<=t){printf("YES\n");}else{printf("NO\n");}}return 0;
}
相关文章:

学习总结2
解题思路 用bfs进行搜索,标记A罐B罐所保存的水的出现情况,当再次出现的时候停止搜索,然后用数组模拟链表进行保存路径.最后输出. 代码 #include <iostream> #include <cstdio> #include <fstream> #include <algorithm> #include <cmath> #in…...

【LeetCode】--- 动态规划 集训(一)
目录 一、1137. 第 N 个泰波那契数1.1 题目解析1.2 状态转移方程1.3 解题代码 二、面试题 08.01. 三步问题2.1 题目解析2.2 状态转移方程2.3 解题代码 三、746. 使用最小花费爬楼梯3.1 题目解析3.2 状态转移方程3.3 解题代码 一、1137. 第 N 个泰波那契数 题目地址:…...
【数据结构与算法】(18):树形选择排序:按照锦标赛的思想进行排序
🤡博客主页:Code_文晓 🥰本文专栏:数据结构与算法 😻欢迎关注:感谢大家的点赞评论关注,祝您学有所成! ✨✨💜💛想要学习更多数据结构与算法点击专栏链接查看&…...
统计单词数
统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求是:给定一个单词࿰…...
c++pair的用法
pair简单来说就是可以存储两种类型数据的一个类,其内部是使用模板实现的,所以可以指定其内部的类型。 pair在#include <utility> pair的构造 pair<int, string> p1({ 1,"张三" });pair<int, string> p2;pair<int, str…...

石油炼化5G智能制造工厂数字孪生可视化平台,推进行业数字化转型
石油炼化5G智能制造工厂数字孪生可视化平台,推进行业数字化转型。在石油炼化行业,5G智能制造工厂数字孪生可视化平台的出现,为行业的数字化转型注入了新的活力。石油炼化行业作为传统工业的重要领域,面临着资源紧张、环境压力、安…...

IP代理技术革新:探索数据采集的新路径
引言: 随着全球化进程不断加深,网络数据采集在企业决策和市场分析中扮演着愈发重要的角色。然而,地域限制和IP封锁等问题常常给数据采集工作带来了巨大挑战。亿牛云代理服务凭借其强大的网络覆盖和真实住宅IP资源,成为解决这些问…...

流畅的 Python 第二版(GPT 重译)(一)
前言 计划是这样的:当有人使用你不理解的特性时,直接开枪打死他们。这比学习新东西要容易得多,不久之后,活下来的程序员只会用一个容易理解的、微小的 Python 0.9.6 子集来编写代码 。 Tim Peters,传奇的核心开发者&am…...

Vue+jquery+jquery.maphilight实现图片热区高亮以及点击效果
//鼠标悬浮效果 mounted() {this.setCurrentTask(0); //对于id为mapAll的热区图,设置鼠标放置在上面有一个颜色 fillColor填充颜色 strokeColor边框颜色 strokeWidth边框宽度 fillOpacity 是设置热区填充颜色的不透明度的属性。 alwaysOn:true 保持常量$(function(…...

靠谱!朋友圈一键转发和自动转发好友朋友圈
微信朋友圈在生活和工作中扮演着重要的社交和信息传播角色。尤其是对于一些企业来说,朋友圈是不可或缺的推广渠道。 今天就给大家分享一个能够实现一键转发和自动转发好友朋友圈的工具——微信管理系统,让大家都能有效的管理朋友圈。 1、定时发圈&…...

线性顺序表算法库
list.cpp 具体函数实现 #include <stdio.h> #include "list.h" #include <malloc.h>/************************************************** ①函数名: CreateList 功 能: 用数组构建顺序表 参 数: ①SqList *&L:传入的线性表 ②ElemType a[]:使用…...

java分割等和子集(力扣Leetcode416)
分割等和子集 力扣原题链接 给你一个只包含正整数的非空数组nums。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。 示例 1: 输入:nums [1,5,11,5] 输出:true 解释:数组可以分割成 [1, 5, 5] …...
383. 赎金信
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 func canConstruct(ransomNote …...

【二】【单片机】有关独立按键的实验
自定义延时函数Delay 分别用Delay.c文件存储Delay函数。用Delay.h声明Delay函数。每次将这两个文件复制到工程中,直接使用。 //Delay.c void Delay(unsigned int xms) //11.0592MHz {while(xms--){unsigned char i, j;i 2;j 199;do{while (--j);}…...

AJAX踩坑指南(知识点补充)
JWT JSON Web Token是目前最为流行的跨域认证解决方案 如何获取:在使用JWT身份验证中,当用户使用其凭据成功登录时,将返回JSON Web Token(令牌) Token本质就是一个包含了信息的字符串 如何获取Token:登录成功之后,服务…...
备战蓝桥杯Day29 - 拼接最大数字问题
问题描述 有n个非负整数,将其按照字符串拼接的方式拼接为一个整数如何拼接可以使得得到的整数最大? 例: 32,94,128,1286,6,71可以拼接除的最大整数为 94716321286128。 问题思路 1.比较两个字符串的第一个数字,数值大的在前面,数值小的在…...

基于springboot的mysql实现读写分离
前言: 首先思考一个问题:在高并发的场景中,关于数据库都有哪些优化的手段?常用的有以下的实现方法:读写分离、加缓存、主从架构集群、分库分表等,在互联网应用中,大部分都是读多写少的场景,设置两个库,主库和读库,主库的职能是负责写,从库主要是负责读…...

Python爬虫之Scrapy框架系列(24)——分布式爬虫scrapy_redis完整实战【XXTop250完整爬取】
目录: 每篇前言:1.使用分布式爬取豆瓣电影信息(1)settings.py文件中的配置:(2)spider文件的更改:(3)items.py文件(两个项目一致!&…...

提升效率,稳定可靠:亚信安慧AntDB的企业价值
亚信安慧AntDB分布式数据库凭借平滑扩展、高可用性和低成本三大核心优势,在业界获得了极高的评价和认可。这些优点不仅为AntDB提供了巨大的市场发展潜力,也使其成为众多企业在数据管理上的首选解决方案。 AntDB的平滑扩展特性极大地提升了企业的灵活性和…...
洛谷入门——P1567 统计天数
统计天数 题目描述 炎热的夏日,KC 非常的不爽。他宁可忍受北极的寒冷,也不愿忍受厦门的夏天。最近,他开始研究天气的变化。他希望用研究的结果预测未来的天气。 经历千辛万苦,他收集了连续 N ( 1 ≤ N ≤ 1 0 6 ) N(1 \leq N …...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...

【Linux】Linux 系统默认的目录及作用说明
博主介绍:✌全网粉丝23W,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...