如图 p1.png 所示: 
有9只盘子,排成1个圆圈。
其中8只盘子内装着8只蚱蜢,有一个是空盘。
我们把这些蚱蜢顺时针编号为 1~8

每只蚱蜢都可以跳到相邻的空盘中,
也可以再用点力,越过一个相邻的蚱蜢跳到空盘中。

请你计算一下,如果要使得蚱蜢们的队形改为按照逆时针排列,
并且保持空盘的位置不变(也就是1-8换位,2-7换位,...),至少要经过多少次跳跃?

注意:要求提交的是一个整数,请不要填写任何多余内容或说明文字。

这个题的思路是bfs,我本来用的dfs怎么都不对,
而且我写的这个也不是正确答案,因为6以下的数都行,如果超过6位数就不行了,应该是内存过大
目前还不知道怎么解决: 见谅

语言是C语言,

圆圈用的 循环队列模拟,那个求0的位置和分解的函数可以只用一个就行,写麻烦了,每一个函数后边都谢了注释功能是什么,英语不好请见谅,使用的拼音,希望能帮助你们一点点

这个题是求的最短路径,我把每次怎么执行的步骤存到了,ma数组中,这样就可以用一个小范围的数据调试,清除每一步的步骤
这个题和八数码有点相似,都是bfs,我学的还不够好,大神看到请指点指点

代码有点多,希望仔细看看,是C语言,写的还行,这个题困扰了我两三天

因为我做题一直是bfs,还好把我稍微看看了数据结构

虽然不是严蔚敏,严蔚敏这本书挺好的,里面有算法

下面是代码

#include<stdio.h>
#include<string.h>
#define N 6//位数
#define M 54321//需要转动的状态
#define MM 12345 //初始状态
int a[9] = {0,1,2,3,4,5,6,7,8}; //这个是总共有八个蚱蜢,
//但是我做的超过了留个就不行了,应该是超时了,不知道怎么弄
int max[5000000] ={0};//判断重复
int ma[500][2] = {0};//存储路径
int way[500]; //变化后的状态
int F = 0,P = 0;//第一个记录max的位置,第二个记录是否有重复
int fenjie(int k)//把每一位 N-1 位数 分解在a数组中,方便交换
{int i,j;for(i = N - 1; i >= 0;i--){a[i] = k % 10;k /= 10;if(a[i] == 0)j = i; }return j;
}
int weizhi0(int n)//求0的位置
{int k = n;int i = N;while(k){i--;if(k % 10 == 0)return i;k/=10;}
}
void swap(int i,int j)//交换
{int t = a[i];a[i] = a[j];a[j] = t;
}
int sum()//求和
{int i,s = 0,l = 1;for(i = N-1; i >= 0; i--){s += l*a[i];l *= 10;}return s;
}int f(int n)//n:总共执行了多少次
{int k;int i = fenjie(max[n]); int one = i - 1,two = i - 2;int one1 = (i+1)%N,two1 = (i+2)%N;if(P == 0)//没有相等的 {if(one < 0)one = N + one;if(two < 0)two = N + two;swap(i,two1);k = sum(); max[++F] = k;if(k == M){P = 1; }swap(i,two1);swap(i,one1); k = sum(); max[++F] = k;if(k == M){P = 1; }swap(i,one1);swap(i,one);k = sum(); max[++F] = k;if(k == M){P = 1; }swap(i,one);swap(i,two); k = sum(); max[++F] = k;if(k == M){P = 1; }swap(i,two);f(n+1);//递归 }
}
int shuchubuzhou(int i)// 给way数组赋值步骤
{int j,k,s = 0;while(i){j = weizhi0(way[i]);k = weizhi0(way[i-1]);ma[s][0] = k;ma[s][1] = j;s++;i--;}ma[s][0] = 0;ma[s][1] = k;
}
int printff(int s)//输出步骤
{int j,i = 1,x = 1;while(i++<N){x *= 10;}way[0] = M;printf("初始\t   0%d  下标\n\n",MM);for(j = 1,i = s-1; i >= 0; i--,j++){printf("第%d步:",j);if(way[i] / x == 0)printf("     0%d  ",way[i]);else printf("     %d  ",way[i]);printf("%d->%d\n",ma[j][1],ma[j][0]);}printf("结束\n");printf("\n总共%d步\n",s);
}
int wayfuzhi()//给way数组赋值 ,每次变换后的数值
{int s = 0;while(F){s++;F = (F - 1)/4;way[s] = max[F];}return s;
}
int main()
{int s;max[0] = MM;//给第一个位置赋值 f(0);//调用函数 //printf("%d\n",F);//输出在bfs中的结束表格 s = wayfuzhi();//给way进行赋值 shuchubuzhou(s+1);//把步骤赋值到way数组中 printff(s);//输出步骤
}

蓝桥杯—第八届—A组—第二题—跳蚱蜢 {C语言}=====【可调试】相关推荐

  1. 第九届蓝桥杯java B组—第二题方格计数(详细介绍)

    文章目录 1.题目如下 2.解题思路 3.详细讲解 4.代码实例 5.答案 最近正在练习蓝桥杯的习题,做到第九届篮球杯的第二题(方格计数)的时候,发现没有思路,就上网上查了一些资料,感觉说的不够详细, ...

  2. 2017年 第八届蓝桥杯 Java B组真题整理

    2017年 第八届蓝桥杯 Java B组真题整理 1.购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞.这不,XX大促销又 ...

  3. java蓝桥杯凑算是,第七届蓝桥杯JAVA B组真题解析-凑算式(第三题)

    第七届蓝桥杯JAVA B组真题解析-凑算式(第三题) 凑算式 A+B/C+DEF/GHI =10 (如果显示有问题,可以参见[图1.jpg]) 这个算式中AI代表19的数字,不同的字母代表不同的数字. ...

  4. 2022年第十三届蓝桥杯大赛C组真题C/C++解析(上)

    **今天给大家带来2022年,第十三届蓝桥杯大赛的真题解析** 转眼间,距离考试已经过去很长时间了,今天解元给大家解析一下,有问题欢迎大家指点 :笑: 下面进入正题 前言 填空题 1.排列字母 2.特 ...

  5. 蓝桥杯2016c++A组真题代码第十题最大比例

    蓝桥杯2016c++A组真题&代码第十题最大比例 /* 最大比例X星球的某个大奖赛设了M级奖励.每个级别的奖金是一个正整数. 并且,相邻的两个级别间的比例是个固定值. 也就是说:所有级别的奖金 ...

  6. 第十三届蓝桥杯Java B组真题

    试题 A: 星期计算 本题总分:5 分 [问题描述] 已知今天是星期六,请问 2022 天后是星期几? 注意用数字 1 到 7 表示星期一到星期日. [答案提交] 这是一道结果填空的题,你只需要算出结 ...

  7. 2021年蓝桥杯 C++ A组 赛题 题目

    第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 试题 A: 卡片 本题总分:5 分 [问题描述] 小蓝有很多数字卡片,每张卡片上都是数字 ...

  8. 蓝桥杯.Scratch.高级组.样题及答案

    原文参见:https://mp.weixin.qq.com/s/Tr4TQj097jo6swjZQXfjhQ 蓝桥杯大赛,由教育部就业指导中心支持,工业和信息化部人才交流中心举办.大赛下面设有青少年创 ...

  9. 第十一届蓝桥杯嵌入式研究生组赛题

    成绩已经出来了,很难受没有得奖,本来预计能拿到二等,结果连三等都没混上,思前想后只有两种可能: ①我自己提交的axf文件出了问题  ②题目太简单,这届实力太强 复查结果出来了,确认是自己犯了低级错误, ...

最新文章

  1. MIS开发中.net Framework的打印功能
  2. vue+element 后台管理系统(三)树形图
  3. caffe命令及其参数解析
  4. 元素对应到html源代码,【整理】用Chrome或Chromium查看百度首页中各元素的html源码...
  5. Winform中怎样在工具类中对窗体中多个控件进行操作(赋值)
  6. eeprom的wp 引脚_EEPROM
  7. apk静态注射[转]-未实践
  8. Ubuntu 16.04 设置MySQL远程访问权限
  9. c语言解三元一次方程组_一次二次反比例,一山更比一山高?二次函数三大解析式详解...
  10. python图片添加文字
  11. html header设置语言,html5 header标签 html header css布局教程
  12. 网页设计与制作常考概念以及问答题
  13. 程序员群嘲红芯浏览器:注释过度很业余 创新混淆视听
  14. 国三数据库系统工程师与软考中的数据库工程师,谁的难度更高?
  15. Mysql 解决 sum求和有多位小数
  16. 华章8月书讯,夏日静心好读书
  17. ubtuntu安装java
  18. oracle虚拟机放文件格式,Oracle VM VirtualBox虚拟如何导入虚拟电脑系统
  19. Jenkins Maven打包Jar,部署远程服务器
  20. 剪映321倒计时特效怎么弄?

热门文章

  1. 我们是如何创造世界上最大的神经网络大学“Сognitive Agro Data Factory”的
  2. 移动宽带用网速逆袭 电信宽带的危机来了吗?
  3. 第三天 入口文件index.php 01
  4. 免费小程序制作平台体验感受分享
  5. IntelliJ IDEA 快捷键大全(Mac版)
  6. 如何选择适合的短信通道
  7. WinPE装到硬盘上只需两步——绿色软件下么
  8. 火箭季后赛第二轮火箭vs湖人比赛赛程
  9. 英文文献作者的几种写法
  10. 用java写篮球弹跳_篮球怎么在家练弹跳?