NKOI 1688 移字母游戏

移字母游戏

Time Limit:20000MS  Memory Limit:165536K
Total Submit:146 Accepted:94
Case Time Limit:3000MS

Description

移动一个只含大写字母A和B的长度不超过20字符串,给定初始状态和目标状态。
给定移动规则为:只能互相对换相邻字母。请找出一条将字符串由初始状态移动变为目标状态的最少步数的办法。

Input

第一行,一个字符串表示初始状态
第二行,一个字符串表示目标状态

Output

一个整数,表示最少步数

Sample Input

样例输入1
AABBAA
BAAAAB
样例输入2:
ABBBAA
BABABA

Sample Output

样例输出1
4
样例输出2
2


一道双向宽搜的模板题,想了想还是写一下,万一以后能用

这里用的是map,不过对于比较复杂的数据结构上尽量不要用map,漏洞百出

#include
#include
#include
#include
using namespace std;
string s1,s2;
mapvis;
mapstep;
queueq[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>s1>>s2;
	len=s1.length();
	cout<


你可能感兴趣的:(DFS/BFS)