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;
}