AcWing 1103. 棋盘游戏
原题链接
简单
作者:
大笔筒
,
2022-03-13 14:40:50
,
所有人可见
,
阅读 237
#include<iostream>
#include<algorithm>
#include<cstring>
#include <queue>
#include <unordered_map>
using namespace std;
typedef pair<int,int> PII;
string start,finish;
int bfs()
{
queue<string> Q;
Q.push(start);
unordered_map<string,int> dist;
dist[start]=0;
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1};
while(!Q.empty())
{
string t=Q.front();Q.pop();
int d=dist[t];
for(int i=0;i<4;i++)
for(int j=0;j<4;j++)
{
for(int k=0;k<4;k++)
{
int a=i+dx[k],b=j+dy[k];
if(a>=0&&a<4&&b>=0&&b<4)
{
swap(t[i*4+j],t[a*4+b]);
if(dist.count(t)==0)
{
dist[t]=d+1;
if(t==finish) return dist[t];
Q.push(t);
}
swap(t[i*4+j],t[a*4+b]);
}
}
}
}
return dist[finish];
}
int main()
{
for(int i=0;i<4;i++)
{
string a;cin>>a;
start+=a;
}
for(int i=0;i<4;i++)
{
string a;cin>>a;
finish+=a;
}
cout<<bfs()<<endl;
return 0;
}