Dijkstra的思想,就是建立一维数组d[NUM]
每次循环,找出d[i]最小的点,对其进行松弛
如此往复
void Dijkstra(){
int _min,k;
for(int i=1;i<=n;i++)//初始化记录数组与距离数组
{
b[i]=false;
d[i]=edge[x][i];//d[i]为x点到i点的距离
}
d[x]=0;//到本身距离为0
b[x]=true;
for(int i=2;i<=n;i++)//排除x自身 需循环n-1次
{
_min=INF;
for(int j=1;j<=n;j++)
if(!b[j]&&d[j]<_min)
{
k=j;
_min=d[j];
}
//循环结束后,易知d[j]就是未访问的点里面最小的点
b[k]=true;//事先标记已访问,避免后面重复访问自身
sum[k]+=_min;//来回两次
for(int j=1;j<=n;j++)// 对j点进行松弛操作
if(!b[j]&&edge[k][j]+d[k]<d[j])
d[j]=edge[k][j]+d[k];
}
}