学习总结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 …...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
【Go】3、Go语言进阶与依赖管理
前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课,做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程,它的核心机制是 Goroutine 协程、Channel 通道,并基于CSP(Communicating Sequential Processes࿰…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...