Dijkstra算法
Dijkstra(迪傑斯特拉)算法是典型的單源最短路徑算法,用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點爲中心向外層層擴展,直到擴展到終點爲止。時間複雜度O(N^2);注意:1,不能求含有負權的圖,含有負權可以採Bellman-ford和SPFA算。2.不能直接求單源最長路徑
下面是代碼模板
void dijkstra(int u)//u爲起點,n爲點的個數
{
int used[100];//標記訪問過的點
int dis[100];//記錄各個點到起點的最短距離
memset(used,0,sizeof(used));//初始化,0爲未訪問,1爲訪問過
memset(dis,INF,sizeof(dis));//初始距離爲無窮大
int pos=u;//pos爲起點
for(i=0;i<n;i++)
dis[i]=map[u][i]; //給起點到各個點的距離賦值
used[u]=1; ///標記起點已經訪問過
for(i=1;i<n;i++)//再找n-1個點
{
int min=INF;//定義個最小距離,初始值爲無窮大
for(j=0;j<n;j++)//找到距離起點最近的點
if(!used[j]&&dis[j]<min)
{
min=dis[j];
pos=j;//pos更新爲最近點
}
used[pos]=1;//標記最近點爲訪問過
for(j=0;j<n;j++)//把dis數組更新,也叫鬆弛
if(!used[j]&&dis[j]>map[pos][j]+dis[pos])
dis[j]=map[pos][j]+dis[pos];
}
}