NKOI 1688 移字母游戏
来源:互联网 发布:通过php将base64 编辑:程序博客网 时间:2024/05/17 06:34
移字母游戏
Time Limit:20000MS Memory Limit:165536K
Total Submit:146 Accepted:94
Case Time Limit:3000MS
Description
移动一个只含大写字母A和B的长度不超过20字符串,给定初始状态和目标状态。
给定移动规则为:只能互相对换相邻字母。请找出一条将字符串由初始状态移动变为目标状态的最少步数的办法。
Input
第一行,一个字符串表示初始状态
第二行,一个字符串表示目标状态
Output
一个整数,表示最少步数
Sample Input
样例输入1AABBAABAAAAB样例输入2:ABBBAABABABA
Sample Output
样例输出14样例输出22
一道双向宽搜的模板题,想了想还是写一下,万一以后能用
这里用的是map,不过对于比较复杂的数据结构上尽量不要用map,漏洞百出
#include<cstdio>#include<iostream>#include<map>#include<queue>using namespace std;string s1,s2;map<string,int>vis;map<string,int>step;queue<string>q[2];int len;int bfs(){q[0].push(s1);vis[s1]=1;step[s1]=0;q[1].push(s2);vis[s2]=2;step[s2]=0;while(q[0].size()&&q[1].size()){int t,i;string x,y;t= q[0].size()>=q[1].size();x=q[t].front();q[t].pop();y=x;for(i=1;i<len;i++)if(x[i]!=x[i-1]){swap(y[i],y[i-1]);if(vis[x]&&vis[y]&&vis[x]!=vis[y])return step[x]+step[y]+1;if(!vis[y]){vis[y]=vis[x];step[y]=step[x]+1;q[t].push(y);} y=x; }}}int main(){cin>>s1>>s2;len=s1.length();cout<<bfs();}
0 0
- NKOI 1688 移字母游戏
- NKOI 1023 生命游戏
- NKOI 2222 开关游戏
- NKOI 2090 游戏
- NKOI 3744 智力游戏
- NKOI 3081 追赶游戏
- NKOI 3539 移棋子游戏[6月月赛题A]
- NKOI 2440 数字消除游戏
- 【例题】【搜索(双向宽搜)】NKOJ 1688 移字母游戏
- 字母游戏
- 字母游戏
- 字母游戏
- 字母游戏
- 打字母游戏
- POJ 字母旋转游戏
- c++打字母游戏
- 键盘字母游戏
- 字母旋转游戏
- 查看硬盘UUID
- 343. Integer Break
- Android自定义控件三部曲文章索引
- Educational Codeforces Round 6 D. Professor GukiZ and Two Arrays(二分 | two pointers)
- Kafka安装(windows)
- NKOI 1688 移字母游戏
- 【C#MVC】搭建.netMVC4工程(一)
- Jackson、JSON-lib、Gson性能对比
- linux命令行模式下安装matlab
- 配置java环境变量超简单!
- 利用Kafka发送/消费消息-Java示例
- 数据结构实验之二叉树五:层序遍历
- Java 内存区域和GC机制
- Java 使用静态嵌套类引发的"bug"