今天复习最短路、随手写了一个代码、习惯性的定义了#define INF=0x7fffffff ;结果程序错误、甚是不解、后仔细研究才明白——弗洛伊德算法的松弛操作:if (d[u]+w[u][v]<d[v]) d[v]=d[u]+w[u][v];显然会数组越界。。。。。sad。
最好的办法是 #define inf 0x3f3f3f3f、0x3f3f3f3f的十进制是1061109567,也就是10^9级别的(和0x7fffffff一个数量级),而一般场合下的数据都是小于10^9的,所以它可以作为无穷大使用而不致出现数据大于无穷大的情形。由于一般的数据都不会大于10^9,所以当我们把无穷大加上一个数据时,它并不会溢出、满足了“无穷大加一个有穷的数依然是无穷大”;
要把一段内存全部置为无穷大,我们只需要memset(a,0x3f,sizeof(a))。
所以在通常的场合下,0x3f3f3f3f真的是一个非常棒的选择。