【发布时间】:2020-04-14 19:31:00
【问题描述】:
我不确定应该使用哪种算法来完成这项任务。我有一个节点图。一些节点与需要遍历的加权线相连。但是,每个节点都连接有加权的双向线。只有一些线必须遍历,而其他线仅用于导航。我需要找到一条路径来遍历所有这些必需的行(双向),但只能遍历一次。我知道我必须从哪个节点开始。
现实世界的问题是我有一个需要从 CNC 图案切割的边缘列表。我正在尝试减少 CNC 机器切割这种图案所花费的时间。我知道我总是想从原点开始,但我不在乎图案在哪里结束,只要图案中的所有小块都被剪掉即可。我知道切割碎片的每个边缘需要多长时间,并且机器足够精确,它可以抬起头部并从那个位置开始到任何一点。我的图并不大,一般情况下可能多达 100 个节点。
这与旅行推销员不同,因为我不必在同一个地方开始和结束,而且我被允许(并且被要求)多次点击一个节点。
Djikstras 算法不起作用,因为我需要遍历所有节点才能切割所有边...我不只是想找到从 A 点到 B 点的最快方式。
奖励,我需要用 C# 实现它,但即使我只知道什么算法,我也可以将它编程。
【问题讨论】:
-
每个形状都有开始和结束?不确定图表是否是这里最好的方法。这些形状已经布置在工作表上,或者这也是优化问题的一部分?
-
啊,等一下,您已经计算出每个停止起点之间的距离,这些是边权重吗?
-
正确...边缘是加权的,实际上是从节点 A 到节点 B(或任何节点)所需的时间。形状大多是矩形,但偶尔在矩形内有弧线。
-
形状是否共享边缘?也许举个例子有助于澄清这个问题。
-
是的,他们可以共享一条边,所以只需要剪切一次。我会提供一张被剪掉的东西的图片,我只需要把它拼凑起来。
标签: c# algorithm graph-algorithm