模拟,不算bfs,只是用了队列而已
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <map> using namespace std; string a,b,c; int n; string hh(string a,string b) { string zz=""; for(int i=0;i<n;i++) { zz=zz+b[i]; zz+=a[i];//不能写成zz=zz+b[i]+a[i],有毒 } return zz; } int bfs() { string s12=hh(a,b); queue<string> q; map<string,int> ma; q.push(s12); ma[s12]=1; while(q.size()) { string sab=q.front(); q.pop(); if(sab==c) return ma[sab]; string s1=sab.substr(0,n); string s2=sab.substr(n,n); string shh=hh(s1,s2); if(ma[shh]) return -1; ma[shh]=ma[sab]+1; q.push(shh); } return -1; } int t; int main() { scanf("%d",&t); for(int kk=1;kk<=t;kk++) { scanf("%d",&n); cin >> a >> b >> c; int mm=bfs(); printf("%d %d\n",kk,mm); } return 0; }
原文:http://www.cnblogs.com/Wangwanxiang/p/7252734.html