我必须做一个这样的闪光灯游戏:有一个板上有洞(超过1000)。最初,有三个钉在板上和橡皮筋围绕在他们周围。我们有三种可能的操作: 1.加钉-在板上加一根钉,2.拆下钉-移除一根钉(如果有超过3根钉)-橡皮筋必须采用其余钉的形状。3.活动钉-橡皮筋必须根据固定杆的当前位置进行更新。
如何最优地找到橡皮筋的形状?
我有两个音符,但我得做一点。主要的是,我们只有在“移动”操作时才能改变橡皮筋的形状,而且我们使用相同数量的固定杆,只有一个在改变位置:
你还有什么其他的建议吗?
发布于 2010-11-06 22:49:59
“开发人员应该根据他的经验和判断来确定最好的方法。”--您是否从给出的规范中复制和粘贴了这个方法?
你要求一个“最优”的解决方案,但如果我是你,我的目标是一个“正确的,足够快”的解决方案。你有一个合同要履行,你可以把无症状留给学者。
无论如何,你的计划,更新乐队时,只有当球员移动一个钉子看上去不错。我们需要记住所有接触橡皮筋的钉,对于每一根钉,我们必须记住它在橡皮筋的哪一边(为了正确地画出带子)。
现在,假设玩家将peg A从a移动到a‘。
作为一个普遍的原则,值得记住的是,即使你的时间段很短,从a到a的距离很小,但是可能会发生多种事情。因此,您必须考虑在该时间段中可能发生的所有事件,选择最早的这样的事件,相应地更新您的数据结构,然后继续剩余的时间段。
那么有什么样的事件呢?
A在带上,带上的相邻钉在A-B-C上,而peg B在a-a‘-C三角形中时发生),
因此,您应该确定所有这样的事件;计算每个事件发生的时间;按时间对事件进行排序;处理最早的事件(仅);对剩余的时间段重复。
(如果两个事件同时发生,怎么办?这要看你的经验和判断了。)
编辑补充:一个复杂的是,一个钉住可能出现在一个以上的部分橡皮筋(例如,带可能是add appear )。但我认为上面的算法草图仍然有效。
一个进一步的皱纹是,即使有少量的钉,你可以作出任意扭曲的配置带。例如,假设带在B和C之间拉长,现在取钉住A,并将其移动到-8的图形中,围绕标杆B和C (顺时针方向围绕B,逆时针方向在C附近)。每次绕圈时,佩格A都会拿起另外几个乐队的碎片。您不能让配置的复杂性在不受约束的情况下增长,因此需要一些方法来阻止事情失控。我建议对乐队的长度施加一个最大限度的限制,这样任何试图把它拉得太远都会导致它折断(当然,在这之前你会有警告信号,例如,带子变薄,颜色变化,发出不吉利的吱吱声)。
https://stackoverflow.com/questions/4115427
复制相似问题