从每个起始节点到每个结束节点,计算最短距离。节点到节点的距离是1

时间:2020-04-19 20:48:39

标签: algorithm graph shortest-path graph-traversal

我必须计算从n个凝视节点到n个末端节点的最短距离。我不在乎实际路径。节点数比n大得多。每个节点正好连接到9个节点。节点到节点的距离是1。 我最好的主意是对起始节点执行Breadth-first search,如果我理解正确的话,它将在线性时间内为我提供n个终止节点距离,并且我将对每个起始节点执行此操作。

有更快的方法吗?

编辑: 完全的问题是,我有一个2d跑道,一条终点线和一辆汽车,它们必须做许多圈,而汽车只能有121个不同的速度向量,所以vx = [-5,5],vy = [-5,5],并且每个滴答声只能更改其速度矢量+ -1。而且汽车不应该撞到墙壁。我想计算出可以完成这些圈数的最短时间(滴答)。我的想法是从速度位置对创建节点,并计算从每个终点线的每个速度到同一终点线的每个速度位置对的最短路径。然后使用这些数据对已知汽车的起始位置的给定圈数进行单独的路径查找。

1 个答案:

答案 0 :(得分:-1)

是的,请使用Djikstra的最短路径算法:

1)创建一个set sptSet(最短路径树集合),该集合跟踪最短路径树中包含的顶点,即计算和确定距源的最小距离的顶点。最初,此集合为空。

2)将距离值分配给输入图中的所有顶点。将所有距离值初始化为INFINITE。将源顶点的距离值分配为0,以便首先选择它。

3)虽然sptSet并不包含所有顶点

.... a)选择一个在sptSet中不存在且具有最小距离值的顶点u。

.... b)将u包含到sptSet中。

.... c)更新u的所有相邻顶点的距离值。要更新距离值,请遍历所有相邻的顶点。对于每个相邻的顶点v,如果u(距源)的距离值与边缘u-v的权重之和小于v的距离值,则更新v的距离值。