水
为什么我的Floyd会输出负数啊?
为什么我的代码写对了却全都爆零了啊?
那么很可能是你的INF取大/小了!
那么inf到底应该取什么值呢?
首先,inf应该要比一般的题目中出现的数据要大,但是又不能超过max_int。
1e9是一个好选择!
为什么不是0x7fffffff呢?这不是int的最大值吗
因为有的时候(例如Floyd等算法)会出现两个inf相加的情况,如果inf取max_int则加法会造成溢出,而取1e9则不会出现这样的情况。
但是初始化会不会很麻烦?
答案是肯定的,谁都不愿意为了一个初始化去写循环,又慢而且还麻烦。
我们注意到0x3f3f3f3f的每8位(int为32位)二进制位上都是0x3f,所以我们可以方便的使用memset来方便的初始化数组
而0x3f3f3f3f等于1061109567,2*inf=2122219134,即使是两倍的inf也并不会溢出
综上所述,inf的选择应该是0x3f3f3f3f
当然如果没有加法操作用0x7f7f7f7f也是可以的,初始化时直接用memset 0x7f就可以了
<完>
原文地址:https://www.cnblogs.com/beilili/p/8856495.html
时间: 2024-10-01 04:19:29