迪傑斯特拉

求從一個地點出發,到地圖上多個點的最短距離。
這裏寫圖片描述

確定出發點爲v0,用一個數組shortPath表示,v0到vi(i∈[1,9]的整數)。用另一個數組getShortPath表示是否找到v0到vi(i爲數組下標)最短路徑
這裏寫圖片描述
shortPath = {0,1,5,#,#,#,#,#,#}
getShortPath={1,0,0,0,0,0,0,0,0}
如上圖
v0行:v0到v1距離爲1,到v2距離爲5;

除已確定的shortPath中最短的距離爲1,對應v0到v1的距離,
v1行:v1~v2=3,v1~v3=7,v1~v4=5;
getShortPath={1,1,0,0,0,0,0,0,0}
shortPath = {0,1,5,#,#,#,#,#,#}
{1,0,3,7,5,#,#,#,#}逐項+1較小的替換shortPath對應元素。
v0通過v1到達v2的距離(1+4)小於v0直接到v2的距離5
shortPath = {0,1,4,8,6,#,#,#,#}

除已確定的shortPath中最短的距離爲4,對應v0到v2的距離;
v2行 :v2~v3=3,v2~v4=1,v2~v5=7
getShortPath={1,1,1,0,0,0,0,0,0}
shortPath = {0,1,4,8,6,#,#,#,#}
{5,3,0, #,1,#,7,#,#}逐項+4較小的替換shortPath對應元素。確定已經找到的不用再比較。
shortPath = {0,1,4,8,5,#,11,#,#}

除已確定的shortPath中最短的距離爲5,對應v0到v4的距離,
v4行: v4~v1=5 , v4~v2=1 , v4~v3=2 , v4~v5=3, v4~v6=6, v4~v7=9
getShortPath={1,1,1,0,1,0,0,0,0}
shortPath = {0,1,4,8,5,#,11,#,#}
{#,5,1,2,0,3, 6,9,#}逐項+5比較,較小的替換shortPath元素。確定已經找到的不用再比較。
shortPath = {0,1,4,7,5,8,11,14,#}

除已確定的shortPath中最短的距離爲7,對應v0到v3的距離,
v3行: v3~v1=7 , v3~v4=2 , v3~v6=3
getShortPath={1,1,1,1,1,0,0,0,0}
shortPath = {0,1,4,7,5,8,11,14,#}
{#,7,#,0,2,#, 3, #, #}逐項+7比較,較小的替換shortPath元素。確定已經找到的不用再比較。
shortPath = {0,1,4,7,5,8,10,14,#}

除已確定的shortPath中最短的距離爲8,對應v0到v5的距離,
v5行: v5~v2=7 , v5~v4=3 , v5~v7=5
getShortPath={1,1,1,1,1,1,0,0,0}
shortPath = {0,1,4,7,5,8,10,14,#}
{#,#,7,#,3,0, #, 5, #}逐項+8比較,較小的替換shortPath元素。確定已經找到的不用再比較。
shortPath = {0,1,4,7,5,8,10,13,#}

除已確定的shortPath中最短的距離爲10,對應v0到v6的距離,
v6行: v6~v3=3 , v6~v4=6 , v6~v7=2, v6~v8=7,
getShortPath={1,1,1,1,1,1,1,0,0}
shortPath = {0,1,4,7,5,8,10,14,#}
{#,#,#,3,6,#, 0, 2, 7}逐項+10比較,較小的替換shortPath元素。確定已經找到的不用再比較。
shortPath = {0,1,4,7,5,8,10,12,17}

除已確定的shortPath中最短的距離爲12,對應v0到v7的距離,
v7行: v7~v4=9 , v7~v5=5 , v7~v6=2 , v7~v8=4
getShortPath={1,1,1,1,1,1,1,1,0}
shortPath = {0,1,4,7,5,8,10,10,17}
{#,#,#,#,9,5, 2, 0, 4}逐項+12比較,較小的替換shortPath元素。確定已經找到的不用再比較。
shortPath = {0,1,4,7,5,8,10,12,16}

除已確定的shortPath中最短的距離爲14,對應v0到v8的距離,
getShortPath={1,1,1,1,1,1,1,1,1}

shortPath = {0,1,4,7,5,8,10,12,16}

發佈了44 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章