社区
C++ 语言
帖子详情
最少所需移动的格子数 求C++大神编程求解
ckgloria
2014-05-05 08:35:01
以下是4X5的单元格,每一格子所在位置用Xij表示,如图白色格子为X13(第一行第三列),黄色的格子可以移动到白色格子处(如图X12,X14,X23均有机会移动到X13),且每次只能移动一格。要求任意位置的黄色格子移动到第一行(可以是第一行的任意位置)其过程产生的移动总步数的最小值。
...全文
335
8
打赏
收藏
最少所需移动的格子数 求C++大神编程求解
以下是4X5的单元格,每一格子所在位置用Xij表示,如图白色格子为X13(第一行第三列),黄色的格子可以移动到白色格子处(如图X12,X14,X23均有机会移动到X13),且每次只能移动一格。要求任意位置的黄色格子移动到第一行(可以是第一行的任意位置)其过程产生的移动总步数的最小值。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ckgloria
2014-05-07
打赏
举报
回复
想推广到任意情况,即现在格子总数变成了nXm,黄白格子数任意(但满足第一行至少有一个白格子,白+黄=nXm),问第一次移动黄格子(可以是任意一个)所需的步数,再假设一旦移动到第一行后黄格子立即转变为白格子,那么从第二次开始到第n次,每次所需最少步数该如何求。
//---------------希望能给出代码-----------------
qq328348253
2014-05-06
打赏
举报
回复
可能我对于你说的第一行理解有所错误,但是道理仍然有用,就这样。
qq328348253
2014-05-06
打赏
举报
回复
请看图,以X25为例,想要X25移动到第一行,最好的路线应该是直上(其实不管任何一格,想要纵向移动,最好的路线都是直接纵向移动)。
那么,想要某一格‘A’达到纵向移动一格,只有一个办法(以纵向向上为例),就是把白色格子移动到‘A’的上面,此时‘A’就可纵向向上移动一格(看图)。从白色格子移动到‘A’的上面一共移动了4格(公式,A格的上方一格的坐标X35与白色格的坐标X13横向纵向距离之和,此处需要说明一下,因为目标是把格子移动到第一行,而白色格子在最下面一行,所以第一步肯定是把白色格移动到目标格子的上方)。此时‘A’向上移动一步到达X35,然后此时,白色格子在‘A’的下方,第二步就是再把白色格子移动到‘A’的上方(看图),因为是9宫格,从X25到X45需要绕过‘A’,则又移动了4格(此处不需要公式,如此移动是规定步骤规定步数了),然后‘A’向上移动一步到达第一行,目标达成。
首先,当目标格子在第一行时,无需移动,直接步数为0。
总结一下公式,首先目标格子到达第一行需要的纵向移动步数为:4 - 目标格子的首坐标(譬如例子X25,就是4-2固定步数)。
第二条公式:白色格子从X13开始移动,第一步是移动到目标格子上方,步数是目标格子坐标与白色格子坐标的两个坐标相减然后求和。例X25与X13,求的和为4。
第三条公式,如果第一次移动后目标格子还不在第一行,则此时相差多少行就加一次4,譬如X25移动到X35后,离第一行还差一行,则加4.
总结三条公式,可以求得移动所需最少步骤。
lm_whales
2014-05-06
打赏
举报
回复
这个方式似乎是固定的 如果本格在第一行,不用移动 如果不在把白格子移动到黄下面一行同一列 白黄交换,白格子和侧面一个格, 交换然后再次移动到黄格子新位置的下面一格子,如此反复即可 这个算法,不需要搜索,只需要简单的判断一下即可
mishisanyi
2014-05-06
打赏
举报
回复
这个思路其实很简单,楼主不是希望将源代码写出来给你吧
逸萌
2014-05-06
打赏
举报
回复
ckgloria
2014-05-06
打赏
举报
回复
引用 4 楼 qq328348253 的回复:
可能我对于你说的第一行理解有所错误,但是道理仍然有用,就这样。
//---------------------------------------------------------------------------------------------------------
嗯,我的原意是将黄色的格子移动到目前白色格子所处的那一行(即我说的第一行)。但我还是有一些疑问
(1)你的计算方法是min=固定移动格子数+白色格子移动数,怎样验证目标黄格子移动到第一行同列就是它 的最小移动数,能否排除它移动到其他列的可能。 (2)还有假设各个黄格子是不同的(比如它有自己编号1,2,3...,初始情况正好与位置编号一致),每移动一次黄格子后,相对于前一步它的位子也发生了变化。再假设我现在要移动2个黄格子,分2次完成,第一次某位置黄格子移动到第一行后立即转变为白格子,到第二次移动时图中白格子数量变成了2,那么此刻黄格子再移动第一行最少移动步数又该如何计算。 (3)推广到任意情况,即现在格子总数变成了nXm,黄白格子数任意(但满足第一行至少有一个白格子,白+黄=nXm),问第一次移动黄格子(可以是任意一个)所需的步数,按照(2)的假设第二次...第n次所需步数 就是这样子,希望能给我一些思路!!
一起来玩玩呗
2014-05-05
打赏
举报
回复
递归回溯
栅格系统布局网页
栅格最早起源于平面设计。1692年法国为提高印刷水平,以方格为设计基础,将一个印刷版面分成上千个小格,这就是最早的栅格雏形。再后来,慢慢演变成运用固定的
格子
设计版面的平面设计风格栅格系统英文为 Grid Systems,也有翻译为网格系统。定义:运用固定的
格子
,遵循一定的规则,进行页面的布局设计,使布局规范简洁有规则
OpenJudge超详细题解,动画图文题解
内容来源于微信公众号:
大神
编程
。已经过原文作者授权。 更新时间:2020-7-5 因为OpenJudge题库和一本通题库很多题都是一样,所以很多链接都是直接使用一本通的题解,完全不影响。 为什么要转载: 动画、图文结合。 我看了部分文章,一些我觉得很简单的题,但从中学到了以前没有学过的知识点和细节,重点是从中学习别人思维方式。 让更多的同学能学到更多的知识。 官方的QQ群:893157498 这是我建的QQ群:795233394 欢迎各位志同道合的同学们^_^ 已更新的题目颜色是蓝色,点击相
九宫重排深度优先搜索、广度优先搜索、A*算法实现
c++
首先感谢
大神
!没用
大神
的讲解不知道实验要怎么交代,
大神
代码讲解在此 深度优先: #include<iostream> #include<vector> #include<algorithm> #include<ctime> using namespace std; const int GRID = 3; int rightPos[9] = { 0,0,0,0,0,0,0,0,0 }; int depth=10; int sum=0; class state
Matlab 进行迷宫行走游戏
求
解
Matlab 进行迷宫行走游戏
求
解
原题用C(
C++
)写 题目:有一个愚蠢的机器人走进一个w*h的迷宫,迷宫里有空地和陷阱。他想要访问迷宫的每个方格,但是它很笨,只会按照指令的方向走。当机器人不能走的时候,也就是下一步会遇到陷阱、迷宫边界或者访问过的
格子
,它会向右转90度(顺时针旋转90度,不能访问已经访问过的方格,且在原地只转一次,
移动
后可获得又一次旋转机会)。请问这个机器人最多可以经过多少个方...
Educational Codeforces Round 133 (Rated for Div. 2) C. Robot in a Hallway
然后从某个
格子
开始把剩下的
格子
绕一圈,然后就好办了,维护一个
数
组b,表示从某一列开始绕圈
所需
要的时间,最后再结合前面的蛇形走位
所需
时间,进行比较,要是前面蛇形走位完加上后面
格子
的
数
量大于b(后面
格子
所需
时间)则说明如果如果不算前面蛇形的
格子
的影响,那么后面每个
格子
的完成时间都是比较小的,因为即使有一个大了那就说明剩下的
格子
完成时间肯定都大了(毕竟至少也要花多一秒),因此不管前面怎样就直接选择b即为该方法的
所需
时间(不管前面有没有工作,到了某个地方还是要等)......
C++ 语言
64,654
社区成员
250,484
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章