迪傑斯特拉演算法求得是原點到各個點之間的距離,不是任意兩點間的距離,各點之間的權值不能為負,否則演算法不適用
思路:陣列dis:表示起點到各點的距離,maps表示各個點之間的距離,如果不相通初始化為無窮,vis表示從起點到該點的距離是否確定
將起點寫入相應的陣列中,dis = 0,vis = 1
然後開始找與起點相連的最短的那個點,則該店就算已經確定,確定之後就要修改相應的資料:
所有點中,只要沒有沒有確定距離的(vis=0)點,都需要進行判斷,從起點直接到該點和經過剛才確定的點到該點,哪個更近,儲存在dis中
上述迴圈一次只能確定乙個點,所有再進行上次迴圈直到n-1次;
之後dis表示的就是從起點到個點的最短距離
上**:注意初始化時,圖是無向圖還是有向圖
#include usingnamespace
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演算法算是貪心思想實...