开始时使用的char数组做的,不知道为什么没有AC,用stringAC了
#include<iostream>
#include<queue>
#include<string>
using namespace std;
int t,n;//n是字符串长度
int k,minx;
int main()
{
cin>>t;
k=1;
while(t--)
{
string a,b,s,c;
cin>>n;
cin>>a>>b>>s;
for(int i=0; i<n; i++)
{
c.push_back(b[i]);
c.push_back(a[i]);
}
//c表示截取后的字符串
queue<string>q;
q.push(c);//将a,b两个字串的所有情况入队
minx=1;
while(!q.empty())
{
string p=q.front();//当前字符串
q.pop();
if(p==s)//string可以直接使用'=='判断是否相同
{
break;
}
a.assign(p,0,n);//字符串截取函数
b.assign(p,n,n);
string c1;//初始化字符串
for(int i=0; i<n; i++)
{
c1.push_back(b[i]);
c1.push_back(a[i]);
}
if(c1==c||q.size()>200)
{
//问题是:循环点会不会不包括开头而从中间循环起来
minx=-1;
break;
//假设循环点不在开头,将搜索深度控制在200即可
}
q.push(c1);
minx++;
}
cout<<k<<" "<<minx<<endl;
k++;
}
return 0;
}