标签:
背景:bfs专题的题,可是直接模拟就好了啊。
思路:管件在于记录第一个s12串,当再次出现第一个s12串时说明进入了循环之中,不能呢达到目标状态。
学习:1.strcmp时要注意,该字符串的有效部分是不是以‘\0‘结尾的。
#include<map> #include<set> #include<stack> #include<queue> #include<vector> #include<cstdio> #include<cstring> #include<cstdlib> #include<iostream> #include<algorithm> #define M 209 #define INF 100000000 #define LL long long int using namespace std; char a[M],b[M],over[M],c[M],key[M]; int n,ans; void scan(char x[]){ for(int i=0;;i++){ char c=getchar(); if(c == '\n') return; x[i]=c; } } int bfs(void){ for(int k=1;;k++){ for(int i=0;i < 2*n;i++){ if(i%2 == 0) c[i]=b[i/2]; else c[i]=a[i/2]; } #ifdef LOCALs for(int i=0;i < 2*n;i++) printf("%c",c[i]); printf("\n"); #endif // LOCAL if(strcmp(c,over) == 0) return k; if(k == 1)for(int i=0;i < 2*n;i++) key[i]=c[i]; if(k > 1 && !strcmp(c,key)) return 0; for(int i=0;i < 2*n;i++){ if(i < n) a[i]=c[i]; else b[i-n]=c[i]; } } } int main(void){ int t; scanf("%d",&t); for(int ij=1;ij <= t;ij++){ memset(over,'\0',sizeof(over)); memset(c,'\0',sizeof(c)); memset(key,'\0',sizeof(key)); scanf("%d%*c",&n); scan(a); scan(b); #ifdef LOCALs for(int i=0;i < n;i++) printf("%c",a[i]); printf("\n"); #endif // LOCAL scan(over); printf("%d ",ij); if(ans=bfs()) printf("%d\n",ans); else printf("-1\n"); } return 0; }
标签:
原文地址:http://blog.csdn.net/jibancanyang/article/details/44516807