迪傑斯特拉(Dijkstra)演算法

2022-07-26 02:36:17 字數 967 閱讀 7201

迪傑斯特拉演算法求得是原點到各個點之間的距離,不是任意兩點間的距離,各點之間的權值不能為負,否則演算法不適用

思路:陣列dis:表示起點到各點的距離,maps表示各個點之間的距離,如果不相通初始化為無窮,vis表示從起點到該點的距離是否確定

將起點寫入相應的陣列中,dis = 0,vis = 1

然後開始找與起點相連的最短的那個點,則該店就算已經確定,確定之後就要修改相應的資料:

所有點中,只要沒有沒有確定距離的(vis=0)點,都需要進行判斷,從起點直接到該點和經過剛才確定的點到該點,哪個更近,儲存在dis中

上述迴圈一次只能確定乙個點,所有再進行上次迴圈直到n-1次;

之後dis表示的就是從起點到個點的最短距離

上**:注意初始化時,圖是無向圖還是有向圖

#include using

namespace

std;

typedef

long

long

ll;//

重點!!!!!

//寫整個程式時一定要map[i][j] = map[j][i] 初始化!!!!!

const

int inf=0x3f3f3f3f

;const

int maxn=1005

;int dis[maxn],maps[maxn][maxn],n;//

n 點的個數

bool

vis[maxn];

void

init()

}void dijkstra(int s)//

s表示起始點

}//此時p就是已經確定的距離此時的點最短的點

vis[p]=1;//

確定for(int j=1;j<=n;j++)

}}}//

從1開始

intmain()

dijkstra(1);

return0;

}

Dijkstra(迪傑斯特拉)演算法

迪傑斯特拉 dijkstra 演算法是典型最短路徑演算法,用於計算乙個節點到其他節點的最短路徑。它的主要特點是以起始點為中心向外層層擴充套件 廣度優先搜尋思想 直到擴充套件到終點為止。指定乙個節點,例如我們要計算 a 到其他節點的最短路徑 引入兩個集合 s u s集合包含已求出的最短路徑的點 以及相...

dijkstra迪傑斯特拉演算法

注意 1.標頭檔案climits的int max,加上2整數會溢位,每次相加前得判斷被加值是否為int max,int max 10為負數 2.得先初始化再對d s c s g,cost等賦值 fill d 0 d 0 max,int max fill g 0 0 g 0 0 max max,int...

迪傑斯特拉 Dijkstra 演算法

迪傑斯特拉 dijkstra 演算法是典型最短路徑演算法,用於計算乙個節點到其他節點的最短路徑。它的主要特點是以起始點為中心向外層層擴充套件 廣度優先搜尋思想 直到擴充套件到終點為止。通過dijkstra計算圖g中的最短路徑時,需要指定起點s 即從頂點s開始計算 dijkstra演算法算是貪心思想實...