我正在尝试在火车游戏中寻找寻路解决方案,其中存在不同类型的分叉。我希望火车从一个铁路到另一个铁路,除了寻路之外,一切都已实施。
我需要获得铁路列表,以便火车可以跟随。现在,问题是如何获得列表。
事情是,有些情况下列车必须多次通过铁路才能到达目的地。
有什么想法吗?
起点是A,结束B.当你看到绿色路径是应该行进的方式。黑色圆圈是火车将不止一次步进的铁轨,在这种情况下是2次。
显然,你需要来自2个黑色才能达到3个红色。你不能只去1black-> 2red-> 1red-> 3red。
答案 0 :(得分:6)
看这张照片
directed graph似乎可以很好地表示您的问题。在图表中给出每个站点和每个交叉点两个节点,每个节点对应列车的每个方向。 Dijkstra's algorithm完全适用于有向图,所以一旦你遇到问题,其余的就很容易了。
例如,在上图中,从A
开始,我们转移到junction 1
。从那里开始,只有一个地方可以搬到junction 2
,所以A
还有一个箭头 - > junction 1
和来自junction 1
的箭头 - > junction 2
。无论你做出哪个选择,你最终都会在junction 1
,但是向另一个方向移动,所以我们从那里创建一个单独的节点。从那里,您可以选择转到A
或B
。
请注意,我删除了其中一个J1
,因为它是多余的(只有一个地方可以去)。
如果列车可以停靠并在A
等站点转弯,我们可以通过两个方向的边连接这两个节点,或者只将它们组合成一个节点。
您可以指定边距权重以指定距离。
答案 1 :(得分:0)
洪水填充应该真的做到了(我在类似的情况下使用它) - 但你只需要仔细使用开关和段。
应允许算法以不同的方向传递相同的段,但不能相同。即每个部分确实应该被视为两个独立的部分。
要重建您应该为分段注入数字的路径,以便从N-1
到达的每个分段都标有N
- 然后向后移动时,应该跟踪分段,以便数字稳定减少一个。
这真是一种BFS。