hdu 5051(模拟)

模拟,不算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;
}

 

posted on 2017-07-28 21:35  发牌员  阅读(176)  评论(0)    收藏  举报

导航