dijkstra求最短路思想與模板

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];  
  	}   
}  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章