80分求助QAQ
查看原帖
80分求助QAQ
339335
cougarmace楼主2023/3/11 22:44

80分 dalao求助QAQ

#include <iostream>
#include <algorithm>
#include <vector>
#include<climits>
#include<cstring>
#include<queue>
#include<map>
using namespace std;
string s1,s2,s3;
map<string,bool> m;
int d[5]={4,-4,1,-1};
struct node
{
  string s;
  int step;
};
queue<node> q;
int main(){
    for(int i=1;i<=4;i++){
      cin>>s3;
      s1+=s3;
    }
    getchar(),getchar();
    for(int i=1;i<=4;i++){
      cin>>s3;
      s2+=s3;
    }
    node k={s1,0};
    q.push(k);
    while(!q.empty()){
      node f=q.front();
      //cout<<f.s<<endl;
      q.pop();
      //if(m[f.s]==1)continue;
      if(f.s==s2){
        cout<<f.step<<endl;
        return 0;
      }
      m[f.s]=1;
      for(int i=0;i<16;i++){
        if(f.s[i]=='1'){
          for(int j=0;j<4;j++){
            string sss=f.s;
            int dd=i+d[j];
            if((d[j]==1&&dd%4==0||d[j]==-1&&d[j]%4==3)){
              continue;
            }
            if(dd>=0&&dd<16&&sss[dd]=='0'){
              swap(sss[i],sss[dd]);
              //cout<<'L';
            }
            if(!m[sss]){
              //cout<<i<<' '<<dd<<' '<<sss<<' '<<f.step+1<<' '<<f.s<<endl;
              k.s=sss;k.step=f.step+1;
              q.push(k);
              m[sss]=1;
            }
          }
        }
      }
    }
    return 0;
}
2023/3/11 22:44
加载中...