这道题目水过,其实就是模拟,但不是为什么归为广搜,基本思路是:模拟每一次的变换,每一次产生一个stack12就判断是否与预期结果相同,若不相同则继续模拟,否则输出变换次数,思路很简单,这里我设置了一个最大的变换次数1000,如果超过了该次数则说明无法变换成功。下面是代码:132K+0MS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Max 110
#define time 1000
char a[Max];
char b[Max];
char result[2*Max];
char ary[2*Max];
int Case;
int c;
int main(){
int test=1;
scanf("%d",&Case);
while(Case--){
scanf("%d",&c);
getchar();
for(int i=0;i<c;i++)
a[i]=getchar();
getchar();
for(int i=0;i<c;i++)
b[i]=getchar();
getchar();
scanf("%s",ary);
int t=1;
while(t<=time){
int pivot=0;
for(int i=0;i<c;i++){
result[pivot++]=b[i];
result[pivot++]=a[i];
}
result[2*c]='\0';
if(strcmp(result,ary)==0){
printf("%d %d\n",test,t);
break;
}
for(int i=0;i<c;i++)
a[i]=result[i];
for(int i=c;i<2*c;i++)
b[i-c]=result[i];
t++;
}
if(t>time)
printf("%d -1\n",test);
test++;
}
return 0;
}