2011-11-16 149 views
3

我做了重量向图,就这样如何使C中的无穷大值? (expecially整数值)

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必须表达无穷大,但表达一些整数值。

例如:V2 V3(长度:200000)

是有整数任何无穷大值从V2到v3最短路径?

朋友我的说〜(1 < < 31),但它不工作

回答

7

与浮点类型,整数类型不具有无穷大的标准值。如果你必须有一个,你必须自己挑选一个值(例如INT_MAX),并在整个代码中正确处理它。请注意,如果您这样做,则可以在赋值和比较中使用特殊值,但不能在算术表达式中使用。

+0

+1并将一个无限的浮点数转换为int [是未定义的行为](http://stackoverflow.com/questions/3986795/casting-float-inf-to-integer)。 – netcoder

0

编辑:没有意识到你是指定整数。

一个解决方案可能是使用'-1'而不是无穷大作为您的基数值。如果我记得正确的话,有向图不应该有负值。

+0

当您应用像Floyd-Warshall这样的全对最短路径算法时,有向图允许使用负值。 – Programmer

3

无穷大不存在整数。你的朋友建议的是32位有符号整数中最大的数字,但这仍然不是无穷大。如果将它添加到某些内容(例如最短路径),那么也会引入溢出的可能性,实际上最终可能会得到一个较小的数字。所以不要这样做。

做到这一点的正确方法是逐个处理无穷大情况。使用无穷大标志,例如~(1<<31),或者甚至更好,-1,并且在你的代码中,每当你想添加两个值时,检查它们中的任何一个是否等于这个标志(等于无穷大),设置结果无需实际做任何总结。或者当你检查一个值是否小于另一个时,检查一个值是否等于这个标志(等于无穷大),那么另一个值肯定是较小的,再次没有进行比较。