[蓝桥杯2017初赛]青蛙跳杯子-map标记+bfs

题目描述

X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色。
X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去。
如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙。
*WWWBBB
其中,W字母表示白色青蛙,B表示黑色青蛙,*表示空杯子。
X星的青蛙很有些癖好,它们只做3个动作之一

  1. 跳到相邻的空杯子里。
  2. 隔着1只其它的青蛙(随便什么颜色)跳到空杯子里。
  3. 隔着2只其它的青蛙(随便什么颜色)跳到空杯子里。
    对于上图的局面,只要1步,就可跳成该局面:WWW*BBB

本题的任务就是已知初始局面,询问至少需要几步,才能跳成另一个目标局面。

输入
输入存在多组测试数据,对于每组测试数据:
输入为2行,2个串,表示初始局面和目标局面。输入的串的长度不超过15
输出
对于每组测试数据:输出要求为一个整数,表示至少需要多少步的青蛙跳。
样例输入
WWBB
WWBB

WWWBBB
BBB
WWW
样例输出
2
10

解题思路:
如果我们考虑青蛙跳,就有太多青蛙了,要考虑很多情况,但如果我们换个角度,让杯子跳,就可以简化题目,我们用map存储字符串用来标记。

代码如下:

#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
#include <queue>
using namespace std;
string a, b;
int dian;
int len;int dx[] = {-1, 1, -2, 2, -3, 3};struct node {string str;int dian;int step;node(string str1, int dian1, int step1) {str = str1;dian = dian1;step = step1;}
};int bfs() {queue<node>q;map<string, int>st;q.push(node(a, dian, 0));st[a] = 1;while (q.size()) {node t = q.front();q.pop();if (t.str == b) {return t.step;}for (int i = 0; i < 6; i++) {int dianf = t.dian + dx[i];//杯子要跳的位置if (dianf < 0 || dianf >= len)continue;string strf = t.str;char hhh = strf[t.dian];strf[t.dian] = strf[dianf];strf[dianf] = hhh;if (st.count(strf) == 0) {q.push(node(strf, dianf, t.step + 1));st[strf] = 1;}}}
}int main() {while (cin >> a >> b) {len = a.length();for (int i = 0; i < len; i++) {if (a[i] == '*') {dian = i;//*的位置break;}}cout << bfs() << endl;}return 0;
}

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

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

相关文章

李洪超 硬件工程师_西安职位|各类工程师,软件开发等多岗位招募,轻松月入过万,全程视频面试...

点击上方蓝字关注我们西安卓华联盛科技有限公司公司简介&#xff1a; 深圳市卓翼科技股份有限公司(以下简称“卓翼科技”)创始于2004年&#xff0c;2010年3月在深交所挂牌上市(证券代码&#xff1a;002369)。卓翼科技专业从事通讯、计算机、消费类电子等产品的研发、制造与销售…

word List 08

word List 08 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

云原生 - Istio可观察性之分布式跟踪(三)

作者&#xff1a;justmine头条号&#xff1a;大数据与云原生微信公众号&#xff1a;大数据与云原生创作不易&#xff0c;在满足创作共用版权协议的基础上可以转载&#xff0c;但请以超链接形式注明出处。为了方便阅读&#xff0c;微信公众号已按分类排版&#xff0c;后续的文章…

[蓝桥杯2017初赛]算式900+dfs,next_permutation

法一: 代码如下&#xff1a; #include <iostream> using namespace std; const int N 15; bool st[N]; int a[N];void dfs(int u) {if (u 11) {if ((((a[1] * 1000 a[2] * 100 a[3] * 10 a[4]) - (a[5] * 1000 a[6] * 100 a[7] * 10 a[8])) * (a[9] *10 a[10])…

electron ant-design-vue 不能用_基于 Electron 桌面消息管理客户端iGot

今天给小伙伴们分享一个超棒的Electron聚合消息管理器Electron-iGot。electron-igot 一款汇聚微信、邮箱、App消息推送的桌面管理客户端。支持推送消息实时提醒及管理。用途用于短信转发&#xff1b;服务器进程监听、内存/CPU预警监测&#xff1b;项目业务的提醒&#xff1b;..…

数据结构---邻接矩阵的BFS

数据结构—邻接矩阵的BFS 原理&#xff1a;参考趣学数据结构 代码&#xff1a; 队列代码&#xff1a; #pragma once #define elemType int #define N 100 #include<stdlib.h> typedef struct dQueue {int data;struct dQueue* next; }dQueue; typedef struct queue {d…

WTM系列视频教程:CodeFirst

WTM系列视频教程第二章&#xff1a;CodeFirst文字摘要&#xff1a;“群里好多人质疑我啊&#xff0c;说你刚40&#xff0c;哪来的30年开发经验。我解释一下啊&#xff0c;我是8岁开始接触编程&#xff0c;学习的第一个语言是basic&#xff0c;用的苹果电脑&#xff0c;不是你们…

总结定时器设计方法_钢结构刚性固定钢柱脚设计方法总结,看完不仅懂操作,还懂了原理...

一、钢柱柱脚形式的分类刚性固定柱脚&#xff1a;1)埋入式柱脚&#xff1b;2)外包式柱脚&#xff1b;3)插入式柱脚&#xff1b;铰接柱脚&#xff1a;外露式柱脚&#xff1b;二、埋入式柱脚2.1、基本概念&#xff1a;所谓埋入式柱脚是指将钢柱底端直接埋入混凝土基础筏板、地基梁…

数据结构---邻接表的BFS

数据结构—邻接表的BFS 原理&#xff1a;参考趣学数据结构 代码&#xff1a; 队列代码&#xff1a; #pragma once #define elemType int #define N 100 #include<stdlib.h> typedef struct dQueue {int data;struct dQueue* next; }dQueue; typedef struct queue {dQu…

华硕主板开机只进入Bios模式不进入Windows系统

华硕电脑进入bios界面解决办法 1.可以按平常方法多重启几下&#xff08;bios界面按f10确认保存&#xff09; 2.是固态硬盘的地方看看是否有松动 插回去就可以了3.图形界面bios先按f7进入高级模式&#xff0c;【security】菜单&#xff0c;通过方向键选择【secure Boot】选项&am…

[蓝桥杯2017初赛]Excel地址

题目描述 Excel单元格的地址表示很有趣&#xff0c;它使用字母来表示列号。 比如&#xff0c;A表示第1列&#xff0c;B表示第2列&#xff0c;Z表示第26列&#xff0c;AA表示第27列&#xff0c;AB表示第28列&#xff0c;BA表示第53列&#xff0c;… 当然Excel的最大列号是有限度…

abp vnext2.0核心组件之.Net Core默认DI组件切换到AutoFac源码解析

老版Abp对Castle的严重依赖在vnext中已经得到了解决,vnext中DI容器可以任意更换,为了实现这个功能,底层架构相较于老版abp,可以说是进行了高度重构.当然这得益于.Net Core的DI容器组件本身的优势.接着abp vnext2.0核心组件之模块加载组件源码解析 上文,上文中我跳过了DI切换这个…

安卓listview下拉刷新_安卓QQ内测教学,保证不让你走弯路

本文章为安卓QQ内测资格获取教程&#xff0c;仅针对安卓用户&#xff0c;苹果手机我暂无渠道。安卓QQ用户不可直接安装测试版QQ&#xff0c;否则会被强制退出&#xff0c;也无法回退旧版本&#xff0c;只能卸载重新安装旧版本。切记&#xff0c;切记&#xff0c;一定现申请资格…

数据结构---prim最小生成树

数据结构—prim最小生成树 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define N 100 #define elemType int //const int MAX_INT (1 << 31) - 1; //const int MAX_INT 0X7fffffff; #define INF (((…

洛谷P2884 [USACO07MAR]Monthly Expense S

题目描述 Farmer John is an astounding accounting wizard and has realized he might run out of money to run the farm. He has already calculated and recorded the exact amount of money (1 ≤ moneyi ≤ 10,000) that he will need to spend each day over the next N…

c++中计算2得n次方_七上,一元一次方程,知识点综合学霸笔记在手

一元一次方程的解定义&#xff1a;使一元一次方程左右两边相等的未知数的值叫做一元一次方程的解&#xff0e;把方程的解代入原方程&#xff0c;等式左右两边相等&#xff0e;解一元一次方程(1)解一元一次方程的一般步骤&#xff1a;去分母、去括号、移项、合并同类项、系数化为…

abp vnext2.0核心组件之DDD组件之实体结构源码解析

接着abp vnext2.0核心组件之模块加载组件源码解析和abp vnext2.0核心组件之.Net Core默认DI组件切换到AutoFac源码解析集合.Net Core3.1,基本环境已经完备,接下去就是构建领域层,vnext整个领域层大致分为聚合根、实体、值对象、事件实体、仓储、服务等等,内容较多,所以我打算分…

[蓝桥杯2017初赛]方格分割-dfs+思维

解题思路&#xff1a; 这是大佬的思路&#xff1a; 这道题可能上来会想到搜格子&#xff0c;但搜格子意味着更高的复杂度以及判连通的需要&#xff0c;本题似乎搜索要切开的边更优。由题意&#xff0c;这一条切割线必定经过图的中心点&#xff0c;那么我们一旦确定了半条到达边…

数据结构---Kruskal最小生成树

数据结构—Kruskal最小生成树 原理&#xff1a;参考趣学数据结构 代码&#xff1a; 快速排序&#xff1a; #pragma once #define elemType int typedef struct vER {elemType u;elemType v;int weight; }VER; int quickSort(VER a[], int l, int h) {//快速排序int i l, j…

电脑打字手指正确姿势_写字坐姿不正确的难题,已被家长攻克,果然高手在民间...

全文1000字&#xff0c;预计阅读需7分钟​进入小学&#xff0c;老师会教一年级学生如何坐正&#xff0c;如何正确拿笔&#xff0c;但由于学生人数较多&#xff0c;加之学习课本知识等&#xff0c;老师很难将每一个学生的坐姿都教得很好。什么样的坐姿才是正确的&#xff1f;怎样…