Dijkstra 算法中的 INT_MAX 是什么?

What is INT_MAX in Dijkstra's Algorithm?

我正在尝试实现 Dijkstra 的算法,并且我非常了解如何在基础层面上实现它,但让我感到困惑的一件事是 INT_MAX。这是我遵循的算法:

Dijkstra(start, end)
     startV = search(start)
     endV = search(end)
     startV.solved = true
     startV.distance = 0
     solved = {startV} //list of solved vertices
     while (!endV.solved)
         minDistance = INT_MAX
         solvedV = NULL
         for s in solved
            for y in s.adjacent
              if(!y.solved)
                  dist = s.distance + y.distance
                  if(dist < minDistance)
                      solvedV = y
                      minDistance = dist
                      parent = s
     solvedV.distance = minDistance
     solvedV.parent = parent
     solvedV.solved = true

     solved.add(solvedV)

如果您要寻找最短路径,为什么要使用称为 INT_MAX 的东西来计算称为 minDistance 的东西?你如何找到 INT_MAX?如果它完全影响答案,我正在使用 C++ 并且我的顶点是结构。但这是作业,所以没有答案的代码,请。

INT_MAX 是一个常量,表示 int 可以存储的最高可能值。 它位于 "limits.h" http://www.cplusplus.com/reference/climits/

当你想找到某物的最短距离时,你想将当前评估的距离与你找到的最短距离进行比较"so far",看看你是否找到了更短的距离。 这通常涉及从 最长 可能的距离作为临时起点,这样您找到的任何距离都会自动变短。

如您所见,再往下,有一个语句 if (dist < minDistance),它将始终是 true 第一个 时间,因为任何有效distance 有效保证小于最大可能距离值,INT_MAX.

许多类似的算法都使用相同的想法,在这些算法中,您想要找到最高或最低值:我们初始化为最差的可能值(根据上下文),以便接受找到的第一个有效值。

考虑一下如果我们不写 INT_MAX 而是其他一些较小的数字会发生什么。结果是您输入了一个相当于假值的值,该值将有效地与您正在测试的真实值竞争。因此,您始终希望保证初始 "fake" 值不会与任何实际值进行比较。

此外,如果在算法结束时找到的最短距离仍然等于 INT_MAX,那么您就知道 function/algorithm 根本没有找到有效距离。例如,函数可能只是 return minDistance,没有别的,然后调用者可以检查它是否等于 INT_MAX 来知道函数是否成功。 (我并不是说这将是最好的设计。)

const int result(getMinDistance(whatever));
if (result == INT_MAX) // no real "minDistance" was actually found.
else ... // found some real "minDistance" value.