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)。这有什么不对吗?