Algorithm 无向图中路径冲突的检测算法

Algorithm 无向图中路径冲突的检测算法,algorithm,graph,path,Algorithm,Graph,Path,我正在为一条铁路做一个模拟器,它由一个无向图表示,其中边是火车轨道,顶点是道岔 每个道岔之间只有一条轨道,允许列车双向行驶 我用Dijkstra单最短路径算法计算每列火车的方向。但现在我需要能够检测到碰撞,并得到结果 例如,假设有两列火车A和B A的路径=(Gt Mx Lg Nm Lg) 当前轨道为Gt 对于B=(Gk Lg Nm Bx A1) 你可以很容易地看到这些火车会在某一点上相互撞击,我正在寻找一种方法来预测和防止这种情况 已经研究过联合查找或Knuth算法x,但我希望你们中的任何人都

我正在为一条铁路做一个模拟器,它由一个无向图表示,其中边是火车轨道,顶点是道岔

每个道岔之间只有一条轨道,允许列车双向行驶

我用Dijkstra单最短路径算法计算每列火车的方向。但现在我需要能够检测到碰撞,并得到结果

例如,假设有两列火车A和B

A的路径=(Gt Mx Lg Nm Lg) 当前轨道为Gt

对于B=(Gk Lg Nm Bx A1)

你可以很容易地看到这些火车会在某一点上相互撞击,我正在寻找一种方法来预测和防止这种情况


已经研究过联合查找或Knuth算法x,但我希望你们中的任何人都能更好地解决这个问题。

如果您对时间限制不感兴趣,那么您可以使用应用于网络的混合整数规划

每列火车有一个起点和一个终点。 对于每列列车:

  • 创建一个可以在您的网络中流通的“产品”

  • 在源节点创建“源”,输出产品(容量为1)

  • 在目标节点上创建一个“接收器”,该接收器使用相同的产品(容量为1)

然后将每条边的容量设置为1。 流经每个源和边的产品是一个整数变量

然后让maxflow解算器最大化流经水槽的产品量。 这将让您知道网络上可以运行的最大列车数量,以及每列列车到达目的地所使用的路径

一旦你有了这些信息,你就会知道哪些轨道应该被“锁定”

网络建模的线性/混合整数规划:

对于实现细节,您可以使用Google或tools,这非常容易引导,适用于java、C#、C++:


如果你想使用Python,你可以看到这篇文章:

你的算法需要考虑时间吗?你有每列火车的速度吗?我有每列火车的速度,还有一个计算顶点之间距离的函数。如果这样做会很好,但如果它不考虑时间就可以工作,我已经很高兴了。您是否正在尝试寻找节点不相交的路径?不一定因为这并不总是意味着会发生碰撞,一列火车可以比另一列火车晚很多时间使用该路径。在这种情况下,没有碰撞。这都是关于知道什么时候在哪个轨道上上锁。