nba超級後場組合燈泡組合(harden和cp3)休賽期來到中國玩耍,他們兩人打算在四個城市進行玩耍,最後他們選擇了北京、上海、西安和長沙。假設這四個城市之間有些城市之前有航線,而有些城市之間沒有航線。為了方便行程,出發前,他們想要知道任意兩個城市之間的最短路程。如果下圖就是航線圖:
我們使用乙個二維陣列path來儲存上述圖的資訊。比如說0號城市到1號城市之間的距離可以儲存為path[0][1] = 2,而1號城市無法直接到達0號城市我們記path[1][0] = infinity。另外我們約定乙個城市到達本身的距離為0,即path[0][0] = 0。
想要使兩個城市(x,y)之間的距離變短,此時我們可以引入第三個城市作為中轉點(z),本來是x->y,現在變成x->z->y,只有這樣才有可能縮短x和y之間的距離,那麼這個中轉點z到底是哪個城市,或者可以說這個z代表的是多個中轉點,因為有時候經過多個中轉點,x和*y之間的距離會更短。下面我們通過一步步的新增中轉點,來更新兩點之間的最短距離。
我們依照最上面的航線圖,解釋如何得到最短路徑。
當任意兩個城市之間不允許經過第三個城市的時候,得到的矩陣如下:
第一步:
現在我們只允許經過0號城市這個中轉點,這個時候如何求解任意兩點之間的最短距離。我們只需進行如下比較:
path[i][0] + path[0][j] < path[i][j]
其中path[i][j]表示的是城市i和j之間的距離。而path[i][0] + path[0][j]表示的是先從i到0號城市,再從0到j的距離之和。
這個時候把i從0~n-1迴圈,把j從0~n-1迴圈,既可以得到當經過中轉點0號城市的時候,任意兩點之間的最短距離。
**實現:
for(var i = 0; i < n; i++ )}}
這個時候我們可以把最短距離矩陣更新為:
從上圖可以看出,在經過中轉點:0號城市的時候,有幾個城市之間的最短距離減少了。
接下來,我們要做的就是增加中轉點:1號城市。要執行的**如下:
for(var i = 0; i < n; i++ )
}}for(var i = 0; i < n; i++ )}}
我們可以繼續更新距離矩陣為:
從上圖可以看出,增加中轉點後,有些城市之間的最短距離進一步減小。
同理,我們進一步增加中轉點城市2和城市3,就可以得到最終的距離矩陣為:
下面給出乙個完整函式:
//接收乙個引數,引數即用二維陣列儲存的距離矩陣
function
floyd
(path)}}}}}
注意:floyd演算法不能解決帶有「負權迴路」(或者叫「負權環」)的圖。因為帶有「負權迴路」的圖沒有最短路。
JavaScript與ActiveX之間傳遞資料
本文研究如何在js等指令碼語言與activex控制項之間通訊,如何傳遞各種型別的引數,以及com的idispatch介面。使用類似的方法,可以推廣到其他所有指令碼型語言,如lua,autocad等。本文將研究以下幾個方面 整型陣列傳參 字串引數,字串返回值 修改傳入字串內容 陣列引數 idispat...
JavaScript 錯誤與除錯
首先先說錯誤的概念預處理 電腦程式的錯誤分為兩種 語法錯誤和邏輯錯誤。比如alert拼寫錯誤,寫成了alter vara 3 4 alert a alter 7 a alert a 執行結果只顯示了7 後面的結果沒有顯示,說明後面的 沒有執行。因為輸出7後遇到了語法錯誤,程式終止執行。上例也進一步說...
JavaScript中 與 區別
用於一般比較,不區分資料型別,只區分值是否相等 如果兩個資料的資料型別不同,則在比較前會先將資料型別進行轉換 var state 1 1 true var state 1 1 true,會先將 1 轉為數字1 var state 1 true true,會先將true轉為數字1 關係運算子中如果數值...