首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取给定模型的所有构建订单。

获取给定模型的所有构建订单。
EN

Stack Overflow用户
提问于 2015-06-22 23:11:09
回答 2查看 53关注 0票数 0

我有问题。我需要为我的工作,一些组件的所有可能的构建顺序。举个简单的例子,你可以想象一个简单的乐高金字塔:

http://i.stack.imgur.com/Y7Lcr.jpg

我尝试了一些DFS,但没有效果。在结尾有一些遗漏的可能性。

有人能帮我吗?语言应该是C++,但我只需要一个提示,而不是一个完整的算法。

一些信息:这些模型以XML文件的形式提供。在那里,您可以找到所有3个方向(x,y,z)的所有邻域关系。所有部件都有唯一的名称/id。开头未定义。在构建顺序上没有限制。因此,你不必完成金字塔的一层,就可以开始另一层。我知道有很多可能的构建顺序。即使是3x3-base本身也有很多可能性(9个阶乘)。但目前这并不重要。

求求你我需要帮助。

你好,埃里克

EN

回答 2

Stack Overflow用户

发布于 2015-06-23 04:50:12

首先,将每一层(或“课程”)视为一个独立的问题。考虑一下底部的9块砖;忽略所有其他的,有9块!可能的订单,所以生成这些订单,称为P。4也是如此!中间砖的可能订单是Q。我们现在可以忽略顶部的单块积木。

PQ上迭代。给定底部砖p和中间砖q的顺序,在底部完成之前,q的第一个移动(即,铺设第一个中间砖)可能是可能的,因此我们可以将该移动与p的移动一起散布;对于q<代码>E217的第一个允许时间,迭代第二个<代码>E118Q<代码>E219的允许时间,并对它们中的每个迭代第三个允许的时间,依此类推。

请注意,顶部的砖块必须始终放在最后。这也是件好事。

这足够继续下去了吗?

票数 1
EN

Stack Overflow用户

发布于 2015-06-22 23:32:49

如果对放置的顺序没有任何限制,那么可以放置的块的顺序就完全不同了( n! different permutations )。在这种情况下,一个简单的解决方案是将所有的块(或者更确切地说,它们的id)放入一个向量中,并使用std::next_permutation生成所有的排列。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30983572

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档