您的位置:首页 > 其它

POJ 3087 Shuffle'm Up——思路题

2017-07-10 10:23 393 查看
#include <iostream>
#include <map>
#include <string>
#include <queue>
#include <algorithm>
using namespace std;
typedef long long ll;
map<string, int> mp;
int n;
string tar;
string trans(string s1, string s2) {
string s12;
for(int i = 0; i < n; i++) {
s12 += s2[i], s12 += s1[i];
}
return s12;
}

int bfs(string s1, string s2) {
queue<string> que;
string s12 = trans(s1, s2);
mp[s12] = 1;
que.push(s12);
while(!que.empty()) {
string fronts = que.front();
que.pop();
if(fronts == tar) return mp[fronts];
s1 = fronts.substr(0, n);
s2 = fronts.substr(n, n);
s12 = trans(s1, s2);
if(mp[s12] > 0) return -1;
mp[s12] = mp[fronts] + 1;
que.push(s12);
}
return -1;
}

int main() {
int T, kase = 1;
string s1, s2;
cin >> T;
while(T--) {
mp.clear();
cin >> n;
cin >> s1 >> s2 >> tar;
int ans = bfs(s1, s2);
cout << kase++ << ' ' << ans << endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: