source file:
#include <iostream.h>
#define M 100
#define n 7 //定义成7是为了看起来方便,这样就可以用a[6]来表示第六个点
int min(int a,int b)
{
int c;
if(a>b) c=b;
else c=a;
return c;
}
void main()
{
int i,j,k;
//initial(N);
int N[n];
N[1]=1; //等于1就表示节点1在集合N中;N[i]=1表示i点在集合N中
//initial(L);
int L[n][n]={ //节点距离矩阵
{0 },
{0,0,2,5,1,M,M}, //节点1
{0,2,0,3,2,M,M},
{0,5,3,0,3,1,5},
{0,1,2,3,0,1,4}, //节点4
{0,M,M,1,1,0,2},
{0,M,M,5,4,2,0}
}; //节点距离矩阵输入结束
//initial[S]
int S[n][n];
for(i=2;i<n;i++)
{
S[1][i]=L[1][i];
}
for(j=2;j<n;j++)
{
N[j]=1; //如果点不在N中,就加入到N中
for(k=2;k<n;k++) //修改不在N中的节点的S值
{
if(N[k]==1)
S[j][k]=S[j-1][k];
else
S[j][k]=min(S[j-1][k],S[j-1][j]+L[j][k]);
}
}
for(i=1;i<7;i++)
{
for(j=2;j<7;j++)
cout<<S[i][j]<<",";
cout<<endl;
}
}