代码如下:
#include<iostream>
#include<queue>
#include<set>
using namespace std;
struct node
{
string s;
int pos;
int val;
};
queue<node>que;
set<string> vis;
int main()
{
node head;
head.s="012345678";
head.pos=0;
head.val=0;
que.push(head);
while(!que.empty())
{
head=que.front();
que.pop();
if(head.s=="087654321")
{
cout<<head.val<<endl;
break;
}
for(int i=-2;i<=2;i++)
{
if(i==0)
{
continue;
}
string tmp=head.s;
swap(tmp[head.pos],tmp[(head.pos+i+9)%9]);
if(vis.count(tmp) == 0)
{
vis.insert(tmp);
node tail;
tail.s=tmp;
tail.pos=(head.pos+i+9)%9;
tail.val=head.val+1;
que.push(tail);
}
}
}
return 0;
}