POJ 3087 Shuffle'm Up——思路题

来源:互联网 发布:日本人爱干净 知乎 编辑:程序博客网 时间:2024/06/06 17:50
#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;}