#include
#include
const int size=5;
//
返回最短路径的长度
//edge[size][size]
,输入参数图信息
//nstart,ndest
,起点和终点
//path[size]
返回路径
int dijkstra(int edge[size][size],int nstart,int ndest,int path[size])
{
int mindis[size];//
起点到终点的最短路径产度
bool ins2[size];//
标志各点是否在
s2
中
//
初始化
int i;
for(i=0;i
{
ins2[i]=true;
}
ins2[nstart]=false;//
初始条件只有
nstart
在
s1
中,其余在
s2
中
for(i=0;i
{
mindis[i]=edge[nstart][i];//
初始各点的最短距离
if(edge[nstart][i]
path[i]=nstart;//
最短路径的前一点
else
path[i]=-1;//
前一点点不存在
}
//
进行计算
while(ins2[ndest])//
当
ndest
还在
s2
中进行计算
{
//
查找
s2
中最短路径的最小值的点
int nminlen=INT_MAX;//
最短路径长度的最小值
int npoint=-1;//
拥有最小值的点
for(i=0;i
查找
{
if((ins2[i])&&(mindis[i]
{
nminlen=mindis[i];
npoint=i;
}
}
if(nminlen==INT_MAX)
break;
//
更新
s2
和
mindis
ins2[npoint]=false;//
该点从
s2
移入
s1