关于无穷大量的选择
? ? 在解題時候,通常有遇到設置為無窮大的情況。這時候通常用0x7fffffff來設置,他是計算機32位整數最大數,相當于INT_MAX.但是在很多時候這樣設置并不會是最佳的,還可能導致bug,這是由于我們有的時候希望無窮大+無窮大=無窮大,比如在prim算法或者Dijstra算法中對邊的松弛操作,這個時候INT_MAX隨便加上一個數就會溢出,從而導致結果錯誤。
? ? 事實上另外一個數字0x3f3f3f3f的十進制是1061109567,這與0x7fffffff是同一個數量級的。我們用0x3f3f3f來代替0x7fffffff可以滿足無窮大加無窮大依然是無窮大的條件,這樣可以避免災難性的錯誤。另外0x3f3f3f還可以使用memset函數批量賦值,例如要將數組dis[]設置為無窮大: ? ? ? ? ? ? ?
memset(dis,0x3f,sizeof(dis));如果數組dis是long long 型,則上面語句將dis設置為4557430888798830399,若dis為int型?,則上面語句將dis設置為1061109567無論在long long還是int,兩個無窮的和都不會爆。上面的0x3f是一個字節0x3f3f3f3f一共有四個這樣的字節。一般情況下,0x3f3f3f3f是一個設置無窮的不錯選擇。? ? ? ? ? ? ?
轉載于:https://www.cnblogs.com/td15980891505/p/5431898.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: iOS 翻译-UIWebView的基本简
- 下一篇: Win7x64_chromeX86_相关