POJ 3087 Shuffle'm Up——思路题

xiaoxiao2021-02-27  154

#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; }
转载请注明原文地址: https://www.6miu.com/read-16985.html

最新回复(0)