最短路径(dijkstra算法)

带权有向图,求源到其他所有各顶点的最短路径长度。
单源最短路径问题,但不能处理带负权边的图 
最短路:dijkstra算法

算法的实现模板:

#define MaxN 10010 //MaxN是点的个数
#define MaxInt 200000000  //MabInt表示不可达
int map[MaxN][MaxN],dist[MaxN];
bool mark[MaxN];
int start,end;
int dijlstra()
{
	for(int i=1;i<=end;i++)
	  dist[i]=MaxInt;
      memset(mark,0,sizeof(mark));
      dist[start]=0;
      //把起点并入集合,搜索的就可以从起点寻找第一条最短的边了
	  for(int i=1;i<=end-1;i++)
	  {
	  	min1=MaxInt;
	  	for(int j=1;j<=end;j++)  //查找到原集合的最短的边 
	  	{
	  		if(!mark[j] && dist[j]<min1)
	  		{
	  			min1=dist[j];
	  			minj=j;
	  		}
	  	}
	  	mark[minj]=1;
//每并入一个点都要对原来的变进行修正,保证任意时刻源点到目标点的距离都是最短的 
		  for(int j=1;j<=end;j++)
		  {
		  	if(!mark[j] && map[minj][j]>0)
			  {
			  	temp=dist[minj]+map[minj][j];
			  	if(temp<dist[j])
			  	dist[j]=temp;
			  } 
		  } 
	  } 
	  return dist[end];
}


你可能感兴趣的:(最短路径,dijkstra算法)