跳蚱蜢 蓝桥杯

编程入门 行业动态 更新时间:2024-10-05 09:33:05

跳<a href=https://www.elefans.com/category/jswz/34/1760569.html style=蚱蜢 蓝桥杯"/>

跳蚱蜢 蓝桥杯

蓝桥杯2017 C/C++ A组第2题
题目: 有9只盘子,排成1个圆圈。 其中8只盘子内装着8只蚱蜢,有一个是空盘。 我们把这些蚱蜢顺时针编号为 1~8
每只蚱蜢都可以跳到相邻的空盘中, 也可以再用点力,越过一个相邻的蚱蜢跳到空盘中。
请你计算一下,如果要使得蚱蜢们的队形改为按照逆时针排列, 并且保持空盘的位置不变(也就是1-8换位,2-7换位,...),至少要经过多少次跳跃?
答案:20

利用广度优先遍历。

#include<iostream>
#include<queue>
using namespace std;
int kong;//空盘的位置
int state[10];
queue<int> q;
queue<int> Count;
int dir[4] = { -2,-1,1,2 };
bool visited[876543211] = { 0 };
void setState(int dishs) {for (int i = 8; i>=0; i--) {if (dishs % 10 == 0) {kong = i;}state[i] = dishs % 10;dishs = dishs / 10;}}
int getValue() {int array = 0;for (int i = 0; i<9; i++) {array = array * 10 + state[i];}return array;
}
bool extend() {int num = q.front();if (num == 87654321)return false;if (visited[num])return true;visited[num] = true;setState(num);for (int i = 0; i<4; i++) {state[kong] = state[(kong + dir[i] + 9) % 9];//移动空盘子 state[(kong + dir[i] + 9) % 9] = 0;q.push(getValue());//将移动后的盘子位置压入队列内 Count.push(Count.front() + 1);//将其对应的移动次数压入队列 setState(num);}return true;
}int main() {setState(12345678);Count.push(0);q.push(12345678);while (extend() && !Count.empty()) {q.pop();Count.pop();}cout << Count.front();return 0;
}

更多推荐

跳蚱蜢 蓝桥杯

本文发布于:2024-02-13 20:59:18,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1760511.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:蚱蜢   蓝桥杯

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!