Dijkstra算法适用于边权为正的情况,可用于计算正权图上的单源最短路径;
其算法的思想在于,从单个源点出发,找到距离其最近的结点,然后松弛路径,反复重复上述操作,就可以得到固定源点到图上任意一个顶点的最短路径;
这个算法的代码和prim算法的代码很像;
void dijkstra()
{
bool vis[105];//标记数组,记录结点是否被访问过;
int d[105];//记录距离源点的距离
//进行初始化
for(int i=1;i<=n;++i)
{
d[i]=INF;
vis[i]=0;
}
d[1]=0;
int flag;
for(int i=1;i<=n;++i)
{
int mindis=INF;
for(int j=1;j<=n;++j)
{
if(!vis[j]&&d[j]<mindis)
{
mindis=d[j];
flag=j;
}
}
vis[flag]=1;
for(int j=1;j<=n;++j)
{
if(!vis[j]&&d[flag]+dis[flag][j]<d[j])
{
dis[j]=d[flag]+dis[flag][j];
}
}
}
}