同一路线上的不同路径重叠

时间:2017-03-14 22:13:55

标签: algorithm recursion data-structures routing overlap

我在A和B之间有一个jorney,它有不同的路径来结束它。路径由初始和最终公里数定义:

path 0 -> (0, 10)
path 1 -> (10, 25)
path 2 -> (10, 15)
path 3 -> (15, 20)
path 4 -> (20, 30)
path 5 -> (25, 35)
path 6 -> (30, 35)
path 7 -> (35, 40)
path 8 -> (40, 50)

如您所见,有些路径重叠。实际上,我们可以获得重叠路径列表:

path 0 -> NONE
path 1 -> 2,3,4
path 2 -> 1
path 3 -> 1
path 4 -> 1,5
path 5 -> 4,6
path 6 -> 5
path 7 -> NONE
path 8 -> NONE

我想得到的是路线中没有重叠路径的所有可能路线,但只应采取一条路线。有没有可以解决这个问题的算法?我尝试用递归或像堆栈这样的辅助数据结构来实现,但我发现很难获得具有最终可能路由的列表,我也试图反转问题并尝试获取丢弃的路径列表,是:

route 0-2-3-4-6-7-8 -> [1,5] discarded
route 0-2-3-5-7-8 -> [1,4,6] discarded
route 0-1-6-7-8 -> [2,3,4,5] discarded
route 0-1-5-7-8 -> [2,3,4,6] discarded

2 个答案:

答案 0 :(得分:0)

是。这是一个简单的图形问题。而不是将这些视为重叠路径,而是意识到里程碑是不相交的节点。例如,如果你在里程碑20,你可以做的唯一向前移动是30 - 并且与其他段重叠并不重要。如果您将它们视为编号城市的航线,也许它会更好。

您可以查找各种图形遍历算法来选择算法。这个很简单:在里程碑10中你只有一个决策点。一旦做出这个选择,路线的其余部分就会确定。

你能从那里拿走吗?

答案 1 :(得分:0)

最后,我得到了代码! (可能是可以改进的):

siunix