题目描述:
代码演示:
//跳蚂蚱
#include
#include
using namespace std;
struct pan{int p[9]; //一共有九个位置int pos; //当前走过的步数
};
//好像是set的重载函数
bool operator<(const pan &lhs, const pan &rhs) {for (int i = 0; i < 9; ++i) {if (lhs.p[i] < rhs.p[i]) return true;if (lhs.p[i] > rhs.p[i]) return false;}return false;
}
pan start, endd; //初始zhuangtai
queue q;
set ms;
int main()
{//给初始数组赋值for(int i=1;i<=8;++i){start.p[i-1] = i; //最后一位代表是0 } //此时p[9]={1,2,3,4,5,6,7,8,0}start.pos=0; //初始步数为0//设置最终状态for(int i=1;i<=8;++i){endd.p[i-1] = 9 - i; //最后一位代表是0 } //此时p[9]={8,7,6,5,4,3,2,1,0}endd.pos = 0;//现将初始状态入队q.push(start);ms.insert(start); //去重? //开始正式开始了,广度优先while(!q.empty()) //队列不为空就一直循环 {//现将数据出队pan te1 = q.front(); //获取队首元素,不删除q.pop(); //删除队首元素//终止条件----两个结构体数组之间的比较--重载运算符 if(!(te1 < endd) && !(endd < te1)){//结束cout<
另外有一种不错的实现方式:
【36】蓝桥杯之跳蚱蜢(填空题)_shallow不秃头的博客-CSDN博客