AcWing 845. 八数码
原题链接
中等
作者:
就你会发光啊
,
2020-07-31 11:48:56
,
所有人可见
,
阅读 579
#include<bits/stdc++.h>
using namespace std;
string start;
void bfs(string start)
{
string end="12345678x";
queue<string> q;
q.push(start);
unordered_map<string,int> d;
int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
while(q.size())
{
auto t=q.front();
q.pop();
int dist=d[t];
if(t==end) {cout<<dist<<endl;return;}
int k=t.find('x');
int x=k/3,y=k%3;
for(int i=0;i<4;i++)
{
int a=x+dx[i],b=y+dy[i];
if(a>=0&&a<3&&b>=0&&b<3)
{
swap(t[k],t[a*3+b]);
if(!d.count(t))
{
d[t]=dist+1;
q.push(t);
}
swap(t[k],t[a*3+b]);
}
}
}
cout<<-1<<endl;
}
int main()
{
for(int i=0;i<9;i++)
{
char op;
cin>>op;
start+=op;
}
bfs(start);
}