题目描述:
有N+1(N是偶数)只盘子,排成1个圆圈。其中N只盘子内装着N只蚱蜢,有一个是空盘。我们把这些蚱蜢顺时针编号为 1~N每只蚱蜢都可以跳到相邻的空盘中,也可以再用点力,越过一个相邻的蚱蜢跳到空盘中。请你计算一下,如果要使得蚱蜢们的队形改为按照逆时针排列,并且保持空盘的位置不变(也就是1-N换位,2-N-1换位,…),至少要经过多少次跳跃?。例如N=8的时候,初始情况如下:
- 分析:当N=8的时候,初始状态是012345678,最终的状态是087654321。起点和终点的状态是明确的,因此,我们可以使用双向广度优先搜索进行处理问题。这道题的母题是八数码问题。
- 参考代码:
#include<bits/stdc++.h>
using namespace std;
int findpos(string str){
for(int i=0;i<str.length();i++){
if(str[i]=='0'){
return i;
}
}
return 0;
}
int main()
{
int n;
cin>>n;
string startstr="0"; //初始和最终状态
string endstr=