BFS(广度优先搜索遍历保存全局状态,华容道翻版做法)--08--DFS--蓝桥杯青蛙跳杯子
2024-09-06 21:10:43
题目描述
X星球的流行宠物是青蛙,一般有两种颜色:白色和黑色。
X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去。
如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙。
*WWWBBB
其中,W字母表示白色青蛙,B表示黑色青蛙,*表示空杯子。
X星的青蛙很有些癖好,它们只做3个动作之一
1. 跳到相邻的空杯子里。
2. 隔着1只其它的青蛙(随便什么颜色)跳到空杯子里。
3. 隔着2只其它的青蛙(随便什么颜色)跳到空杯子里。
对于上图的局面,只要1步,就可跳成该局面:WWW*BBB
本题的任务就是已知初始局面,询问至少需要几步,才能跳成另一个目标局面。
X星球的居民喜欢把它们放在一排茶杯里,这样可以观察它们跳来跳去。
如下图,有一排杯子,左边的一个是空着的,右边的杯子,每个里边有一只青蛙。
*WWWBBB
其中,W字母表示白色青蛙,B表示黑色青蛙,*表示空杯子。
X星的青蛙很有些癖好,它们只做3个动作之一
1. 跳到相邻的空杯子里。
2. 隔着1只其它的青蛙(随便什么颜色)跳到空杯子里。
3. 隔着2只其它的青蛙(随便什么颜色)跳到空杯子里。
对于上图的局面,只要1步,就可跳成该局面:WWW*BBB
本题的任务就是已知初始局面,询问至少需要几步,才能跳成另一个目标局面。
输入
输入存在多组测试数据,对于每组测试数据:
输入为2行,2个串,表示初始局面和目标局面。输入的串的长度不超过15
输入为2行,2个串,表示初始局面和目标局面。输入的串的长度不超过15
输出
对于每组测试数据:输出要求为一个整数,表示至少需要多少步的青蛙跳。
样例输入 Copy
*WWBB
WWBB*
WWW*BBB
BBB*WWW
样例输出 Copy
2
10
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
string a,b;
map<string,int>sigmap;
class node{
public:
string s;
int step;
int id;
node(string S,int step,int id){
this->s=S;
this->step = step;
this->id=id;
}
};
void bfs()
{
queue<node>myque;
if(a==b)
cout<<<<endl;
else{
node Nod=node(a,,a.find('*'));
myque.push(Nod);
sigmap[a]=;
while(!myque.empty()){
Nod=myque.front();
myque.pop();
for(int i=Nod.id-; i<=Nod.id+; i++){
if(i>=&&i<Nod.s.length()&&i!=Nod.id){
string S=Nod.s;
swap(S[i],S[Nod.id]);
if(sigmap[S] == )
continue;
if(S==b){
cout<<Nod.step+<<endl;
return;
}
sigmap[S]=;
node now=node(S,Nod.step+,i);
myque.push(now);
}
}
}
}
}
int main()
{
while(cin>>a){
cin>>b;
bfs();
}
return ;
}
最新文章
- asp.net pipeline完整图
- iOS HTTP访问网络受限
- 在sql语句中使用 xml for path 格式化字符串的方法总结
- quick-3.5 eclipse android
- 如何限制虚拟主机可使用的CPU资源
- WPF Navigation
- Android实战技巧:深入解析AsyncTask
- Matplotlib中文设置
- spring集成quartz scheduler
- PHP,单双引号的区别‘“”“”’
- Asp.Net MVC 模型(使用Entity Framework创建模型类) - Part.1
- 模板-->;Matrix重载运算符:+,-,x
- 163k地方门户网站系统自动审核信息脚本
- java.lang.ClassCastException: sun.proxy.$Proxy11 cannot be cast to分析
- js阻止冒泡
- tomcat一个端口配置多个项目
- 慢日志查询python flask sqlalchemy慢日志记录
- centos7下安装docker(16.docker跨主机存储)
- >;/dev/null 2>;&;1和2>;&;1 >;/dev/null区别
- python--第十天总结(IO多路复用)
热门文章
- Spring AOP操作action时无法注入,报NullPointer异常
- Makefile文件(DE1-soc软件实验”hello_word";)
- C++-HDU2196-Computer-[树的直径]
- kali2018.4 下载地址
- Apache Kafka(十一)Topic 的配置与组成
- 文件操作_python
- 格式化输出_python
- Python爬取微博热搜以及链接
- unittest的discover方法
- 对已经存在的没有唯一标识的表添加一个自增的id字段(利用序列sequence)操作过程