2011-11-16 51 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,並且在你的代碼中,每當你想添加兩個值時,檢查它們中的任何一個是否等於這個標誌(等於無窮大),設置結果無需實際做任何總結。或者當你檢查一個值是否小於另一個時,檢查一個值是否等於這個標誌(等於無窮大),那麼另一個值肯定是較小的,再次沒有進行比較。