Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 列车轨道组合算法_Algorithm - Fatal编程技术网

Algorithm 列车轨道组合算法

Algorithm 列车轨道组合算法,algorithm,Algorithm,我最近给我的孩子买了一辆玩具火车。当我组装它的时候,我想知道我是否可以创建一个应用程序,在其中你加入了什么和平,你有多少和平,结果是轨道图,至少租用了一条闭路。因此,我的输入将是我从每种类型中获得了多少和平,这是类型: 输出结果如下: 我可以使用什么算法来实现这一点,如果您有任何建议或建议,请告诉我。您可以使用蛮力方法,从第一部分开始,然后尝试第二部分的所有剩余部分,然后尝试第三部分的所有剩余部分,依此类推。例如,您可以并行构建许多布局 件1-件2-件3- 件1-件3-件4- 件1-件4-件

我最近给我的孩子买了一辆玩具火车。当我组装它的时候,我想知道我是否可以创建一个应用程序,在其中你加入了什么和平,你有多少和平,结果是轨道图,至少租用了一条闭路。因此,我的输入将是我从每种类型中获得了多少和平,这是类型:

输出结果如下:


我可以使用什么算法来实现这一点,如果您有任何建议或建议,请告诉我。

您可以使用蛮力方法,从第一部分开始,然后尝试第二部分的所有剩余部分,然后尝试第三部分的所有剩余部分,依此类推。例如,您可以并行构建许多布局

件1-件2-件3-

件1-件3-件4-

件1-件4-件5-

(其中-表示连接)

当您到达布局无效的点时,您可以停止并将其从列表中划掉

这种方法的一个优点是,如果有解决方案,它会找到解决方案。缺点是可能需要很长时间

如果你想要一个单一的布局,问题是如何确定哪个是“最好的”。一种方法是为不同的部分分配不同的权重,然后您可以使用这些分数评估布局

你可以通过将你的作品分类来优化这一点,例如,将你的作品分为直的和弯曲的,然后根据你拥有的每一件作品的数量进行一些推断。例如,如果你有4个弯曲的部分和16个直的部分,你可以得出结论,你有4个角,其他的必须是边。因此,从这个起点开始,您将并行地生成多个布局,当您到达布局无效的点时,您可以停止并将其从列表中划掉


另一个优化可能是创建一个示例布局列表并基于这些列表进行构建。例如,如果您有一个示例循环布局作为起点,您可以尝试用一组点替换其中一个直段,然后从那里开始构建。

哦,伙计,我想您需要许多算法、图形和空间数据结构(这样您就可以检测重叠和桥梁等),以及一些寻路式的启发式方法。也许你可以使用某种机器学习来强行解决问题,以免把桥梁放在一边,从基础开始。假设我只有直线和曲线的和平,你能建议如何从那里开始吗?没有桥梁,你可以在二维中思考,这更容易。您需要所有轨道连接器的x、y坐标(工件尺寸)。然后,可以模拟在空间中放置轨迹组件,并检测碎片是否合适。从一个片段开始,从所有剩余片段开始一个递归分支,该分支查找所有连接片段(这将很快变大,因此使用启发式方法将其缩小)。这不是一个简单的问题。Prolog可以做到这一点。从A1、a和D的片段来看,除了长度之外,似乎允许使用相同的片段。在这种情况下,通常不可能有有效的算法来解决这个问题,因为它是NP难的:如果你确实有一个有效的算法来解决它,那么你可以通过为集合中的每个数字制作一个对应长度的单条直线来解决NP难的任何实例,并添加4个直角角件。