我制作了重量指导图,就像这样
6
0 3 4 INFINITY INFINITY INFINITY
INFINITY 0 INFINITY 7 INFINITY INFINITY
INFINITY 3 0 5 11 INFINITY
INFINITY INFINITY INFINITY 0 6 3
INFINITY INFINITY INFINITY INFINITY 0 4
INFINITY INFINITY INFINITY INFINITY INFINITY 0
首先,我使用了一些整数值来表示无穷大,如99或20000。 但是当我发现它是错的时候,v5 - > v4必须是表达无穷大但表示一些整数值。
ex:从v2到v3的最短路径:v2 v3(长度:200000)
是否有整数的无穷大值?
我的朋友说〜(1 <&lt; 31)但它不起作用答案 0 :(得分:8)
与浮点类型不同,整数类型没有无穷大的标准值。如果你必须拥有一个,你必须自己选择一个值(例如INT_MAX
)并在整个代码中正确处理它。请注意,如果执行此操作,则可以在赋值和比较中使用特殊值,但不能在算术表达式中使用。
答案 1 :(得分:3)
整数不存在无穷大。你朋友建议的是32位有符号整数中的最大数字,但仍然不是无穷大。如果你把它添加到某个东西(例如在最短的路径中),这也会引入溢出的可能性,你实际上最终可能会得到一个较小的数字。所以不要这样做。
正确的方法是逐个处理无限。使用无穷大的标志,例如相同的~(1<<31)
,或者甚至更好的-1
,并且在您的代码中,每当您想要添加两个值时,检查它们中的任何一个是否等于此标志(等于无穷大),将结果设置为无穷大而不实际进行任何求和。或者,当您检查一个值是否小于另一个值时,检查一个值是否等于此标志(等于无穷大),然后另一个值肯定更小,同样没有实际进行比较。
答案 2 :(得分:0)
编辑:没意识到你在指定整数。
解决方案可能是使用'-1'而不是无穷大作为基数值。如果我没记错的话,有向图不应该有负值。