关于无穷大的设定
一般来说,在不明确的情况下,都取0x7fffffff作为无穷大,因为这的确是32-bit int的最大值。但在某些情况下,这可能不是一个很好的选择。
很多时候,我们并不是单纯拿无穷大来比大小,而是会进行一定运算后再比较,例如最短路径算法中常用到的松弛操作,两个无穷大相加就会变成负数(溢出了)。
这时候,我们可以选用一些更为精巧的数字来代替,也就是0x3f3f3f3f。
0x3f3f3f3f的10进制表示为1061109567,这个数已达到10^9,足以表示无穷大,而且2*0x3f3f3f3f=2122219134,满足无穷大+无穷大仍为无穷大,而不会变成负数。
还有一点是,0x3f3f3f3f的每个字节都是0x3f,所以可以方便初始化,比如memset(a,0x3f,sizeof(a)),而0x7fffffff就需要循环操作了。
我前面的程序好像少打了两个f。。