Djikstra的邻居检查和设置指针的算法

时间:2017-03-14 11:06:36

标签: c++ algorithm dijkstra

while(!adjacents.isEmpty())
{
   if(! adjacents.front()->visited ) //visited is a bool to see if it's been visited or not
   {
      if( (tentdist + abs(adjacents.front()->val - val)) < adjacents.front()->tentdist)
      {
         adjacents.front()->tentdist = tentdist + abs(adjacents.front()->val - val);
         adjacents.front()->prev = this; //prev is a pointer to another vertex
      }
   }
}

大家好,我想知道我的邻居检查部分是否正确。我认为它可能在某个地方,因为当我到达某些所需的顶点时,当我循环它时,prev指针是不正确的。

adjacents是一个充满指向相邻顶点的队列。所有顶点都有:

int val - 包含节点值的值。例如,顶点A和B之间的权重将是B.val减去A.val

的绝对值

bool visited - 一个布尔值,用于查看是否已访问过相邻节点

Vertex * prev - 指向另一个顶点的指针,在发现较短的暂定距离时进行调整

int tentdist - 暂定距离。起始顶点初始化为零,而图中的所有其他顶点初始化为INT_MAX。

我在想这个比较可能有点偏差?对于此的一次迭代,(算法的这一部分由每个当前顶点循环)我的tentdist突然设置为INT_MAX。在另一个实例中,它停止了从起始节点到结束节点链接的prev,所以当我从所需节点开始循环通过prev时,它突然停止(因为它被设置为NULL)。这有什么不对吗?

0 个答案:

没有答案