找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 6979|回复: 9

科协竞赛 教育机器人 附加任务 智能分拣

[复制链接]
发表于 2019-2-1 09:09:30 | 显示全部楼层 |阅读模式
想尝试用乐高来挑战 不为比赛 请问各位高人用什么语言进行编程  计算步骤   运行结果类似下文汉诺塔  给出步骤




问题描述

QQ浏览器截图20190201090206.png
有9个环    3个灰色  3个黄色  3个蓝色
有3个柱子   黄 蓝
抽签随机分配 环的位置  但每根柱子最多套5层环 最少可为0

移动规则
每次只能移动位于柱子顶端的环
每次只能移动一个环
柱子位置不能移动
每根柱子最多套5层环

最终目的是
3个黄色环套在黄色柱子上
3个蓝色环套在蓝色柱子上
3个色环套在红色柱子上








我只会c汉诺塔的
#include<stdio.h>
#include<stdlib.h>
static int cnt = 0;
void printHNT(char A, char B,int n) {
        printf("第%d次移动:移动'%d'从%c -> %c\n", ++cnt, n, A, B);
}
void HanNuoTa(char A, char B, char C, int n) {
        if (n == 1) {
                printHNT(A, C, 1);//设置递归打印的开始,和递归结束的条件
                return;
        }
        HanNuoTa(A, C, B, n - 1);//大于1的话,让B作为缓冲点,并在此函数内递归2^(n-1)次
        printHNT(A, C, n);//递归完后回到主线程递归的交接点上,让最后一个环移动到C上
        HanNuoTa(B, A, C, n - 1);//交换A和B立场,让B里的n-1个环进行2^(n-1)次递归
}
int main() {
        char A = 'A', B = 'B', C = 'C';
        int n;
        printf("输入环的数目:");
        scanf("%d", &n);
        HanNuoTa(A, B, C, n);
        return 0;
}
运行结果
新建位图图像 (2).jpg

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
发表于 2019-2-2 01:02:29 | 显示全部楼层
本帖最后由 1176658950 于 2019-2-2 01:05 编辑

这个很考算法,只做局部最优解简单,要写全局最优解算出时间最少步骤很不容易,正在挑战全局最优解中
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复 1 0

使用道具 举报

发表于 2019-2-1 23:44:15 | 显示全部楼层
C语言,70-120秒完成,很简单
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2019-2-2 00:02:55 | 显示全部楼层
本帖最后由 1176658950 于 2019-2-2 00:07 编辑

https://v.youku.com/v_show/id_XNDA0MzIzMDE0OA==.html?x&sharefrom=android&sharekey=3f7de7c9508f6679f3033dfccfd0a6ef6
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2019-2-2 01:07:16 来自手机 | 显示全部楼层
1176658950 发表于 2019-2-2 01:02
这个很考算法,只做局部最优解简单,要写全局最优解算出时间最少步骤很不容易,正在挑战全局最优解中

能分享一下吗?或者您让我参考那本书,我真是想破脑袋了@_@
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2019-2-2 08:26:47 来自手机 | 显示全部楼层
1176658950 发表于 2019-2-2 00:02
https://v.youku.com/v_show/id_XNDA0MzIzMDE0OA==.html?x&sharefrom=android&sharekey=3f7de7c9508f6679f3 ...

想用乐高来做。第一步弄出算法,输出结果。第二部制作电机运动模块。小弟愚钝万望指教一二。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2019-2-2 11:36:20 | 显示全部楼层
chao8574 发表于 2019-2-2 08:26
想用乐高来做。第一步弄出算法,输出结果。第二部制作电机运动模块。小弟愚钝万望指教一二。

c语言程序都接近1000行,如果用乐高编程i7+1060显卡都卡死掉
而且要存每一步的方块位置乐高数组用起来就不方便
先实现一个小目标,把蓝色色块移到蓝色底座,在此过程中其他方块不需要考虑颜色是否得分
再实现下一个小目标把蓝色方块移到蓝色第二格
.
.
.
6个小目标实现就完成任务了
小目标就是先将目标方块移动到顶层,再移动目标区域清空,在把目标方块丢进去,再移平方块,

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2019-2-2 13:07:03 | 显示全部楼层
1176658950 发表于 2019-2-2 11:36
c语言程序都接近1000行,如果用乐高编程i7+1060显卡都卡死掉
而且要存每一步的方块位置乐高数组用起来就 ...

太感谢了!
请问c编程用什么方法 我好有针对的学习
我目前的思路和您描述的很像
1清空一个柱子(如果优化步数要尽量有连色环2个)
2先完成最底层

目前实验的结果
3 3 3分布 最少需要20步
5 4 0分布 需要19步
5 2 2分布 需要19步

我个人认为有点类似汉诺塔 也类似华容道

编程的想法是
给每个环一个坐标(所在柱子颜色x,层数y,自身颜色z)

通过移动变换所在柱子的颜色 和 层数

最终实现
层数,层数+1,层数+2 的  自身颜色z相同  且与所在柱子颜色x相同

现在问题是变化手法是否类似 汉诺塔? 我直接变换坐标一步步printf?
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2019-2-2 13:10:53 | 显示全部楼层
1176658950 发表于 2019-2-2 11:36
c语言程序都接近1000行,如果用乐高编程i7+1060显卡都卡死掉
而且要存每一步的方块位置乐高数组用起来就 ...

本人是零基础 学物理出身的 算法几乎一窍不通 还望您提点 相关知识或类似算法 我进行恶补
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2019-2-2 14:58:50 | 显示全部楼层
chao8574 发表于 2019-2-2 13:07
太感谢了!
请问c编程用什么方法 我好有针对的学习
我目前的思路和您描述的很像

建一个共用体
三维数组,300步3列6格,毎格放颜色代号
而二维数组300步18格
先填平
拉到顶,清空底,放到底,填平重复6次
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-11-21 20:27 , Processed in 0.088818 second(s), 24 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表