这是蓝桥杯的题目
题目
有9只盘子,排成1个圆圈。
其中8只盘子内装着8只蚱蜢,有一个是空盘。
我们把这些蚱蜢顺时针编号为 1~8
每只蚱蜢都可以跳到相邻的空盘中,
也可以再用点力,越过一个相邻的蚱蜢跳到空盘中。
请你计算一下,如果要使得蚱蜢们的队形改为按照逆时针排列,
并且保持空盘的位置不变(也就是1-8换位,2-7换位,…),至少要经过多少次跳跃?
注意:要求提交的是一个整数,请不要填写任何多余内容或说明文字。
BFS(){
初始化队列,将初始状态加到队列中去
并且标记vis
while(队列不为空){
取队列的front 队列pop
该状态==目标状态{.........}
与该状态相邻的所有状态且没有被访问到
加入到队列中去
....
标记该状态}
这个是BFS基本模板,但是针对不同题目还是有稍微的不同,需要进行调整。
对于这道题,==目标状态放在【状态转移的时候】
并且记住是跟该状态相邻的状态,所以在同一个状态转移中需要将状态在转移回来。【两个swap】
贴上源码:
#include <iostream>
#include <string.h>
#include <algorithm>
#include <queue>
using namespace std;
const int Maxn=1000000000;
struct note{
int number;
int foot;
}tempNote,tempSecondNote,tempSwapNote;
int startNumber=