蓝桥杯—第八届—A组—第二题—跳蚱蜢 {C语言}=====【可调试】
如图 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语言}=====【可调试】相关推荐
- 第九届蓝桥杯java B组—第二题方格计数(详细介绍)
文章目录 1.题目如下 2.解题思路 3.详细讲解 4.代码实例 5.答案 最近正在练习蓝桥杯的习题,做到第九届篮球杯的第二题(方格计数)的时候,发现没有思路,就上网上查了一些资料,感觉说的不够详细, ...
- 2017年 第八届蓝桥杯 Java B组真题整理
2017年 第八届蓝桥杯 Java B组真题整理 1.购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞.这不,XX大促销又 ...
- java蓝桥杯凑算是,第七届蓝桥杯JAVA B组真题解析-凑算式(第三题)
第七届蓝桥杯JAVA B组真题解析-凑算式(第三题) 凑算式 A+B/C+DEF/GHI =10 (如果显示有问题,可以参见[图1.jpg]) 这个算式中AI代表19的数字,不同的字母代表不同的数字. ...
- 2022年第十三届蓝桥杯大赛C组真题C/C++解析(上)
**今天给大家带来2022年,第十三届蓝桥杯大赛的真题解析** 转眼间,距离考试已经过去很长时间了,今天解元给大家解析一下,有问题欢迎大家指点 :笑: 下面进入正题 前言 填空题 1.排列字母 2.特 ...
- 蓝桥杯2016c++A组真题代码第十题最大比例
蓝桥杯2016c++A组真题&代码第十题最大比例 /* 最大比例X星球的某个大奖赛设了M级奖励.每个级别的奖金是一个正整数. 并且,相邻的两个级别间的比例是个固定值. 也就是说:所有级别的奖金 ...
- 第十三届蓝桥杯Java B组真题
试题 A: 星期计算 本题总分:5 分 [问题描述] 已知今天是星期六,请问 2022 天后是星期几? 注意用数字 1 到 7 表示星期一到星期日. [答案提交] 这是一道结果填空的题,你只需要算出结 ...
- 2021年蓝桥杯 C++ A组 赛题 题目
第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 第十二届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 试题 A: 卡片 本题总分:5 分 [问题描述] 小蓝有很多数字卡片,每张卡片上都是数字 ...
- 蓝桥杯.Scratch.高级组.样题及答案
原文参见:https://mp.weixin.qq.com/s/Tr4TQj097jo6swjZQXfjhQ 蓝桥杯大赛,由教育部就业指导中心支持,工业和信息化部人才交流中心举办.大赛下面设有青少年创 ...
- 第十一届蓝桥杯嵌入式研究生组赛题
成绩已经出来了,很难受没有得奖,本来预计能拿到二等,结果连三等都没混上,思前想后只有两种可能: ①我自己提交的axf文件出了问题 ②题目太简单,这届实力太强 复查结果出来了,确认是自己犯了低级错误, ...
最新文章
- MIS开发中.net Framework的打印功能
- vue+element 后台管理系统(三)树形图
- caffe命令及其参数解析
- 元素对应到html源代码,【整理】用Chrome或Chromium查看百度首页中各元素的html源码...
- Winform中怎样在工具类中对窗体中多个控件进行操作(赋值)
- eeprom的wp 引脚_EEPROM
- apk静态注射[转]-未实践
- Ubuntu 16.04 设置MySQL远程访问权限
- c语言解三元一次方程组_一次二次反比例,一山更比一山高?二次函数三大解析式详解...
- python图片添加文字
- html header设置语言,html5 header标签 html header css布局教程
- 网页设计与制作常考概念以及问答题
- 程序员群嘲红芯浏览器:注释过度很业余 创新混淆视听
- 国三数据库系统工程师与软考中的数据库工程师,谁的难度更高?
- Mysql 解决 sum求和有多位小数
- 华章8月书讯,夏日静心好读书
- ubtuntu安装java
- oracle虚拟机放文件格式,Oracle VM VirtualBox虚拟如何导入虚拟电脑系统
- Jenkins Maven打包Jar,部署远程服务器
- 剪映321倒计时特效怎么弄?