int choose(int path[M][M],int u,int or[])
{
int min=1000, i, j;
for(i=0;i<M;i++)
if(or[i]==0)//如果测试的点不在集合中(未测试)
if(min>path[u][i])
{
min=path[u][i];//找到最小的
j=i;
}
or[j]=1;//已找到赋集合中
distance[j]=min;
return j;
}
void Distance_G(LIST G[],int path[M][M])
{
int or[M]={0}, i, j, count=0, temp;//最小边
for(i=0;i<M;i++)//////////////////一共可能出现的从0到其他最短路径的个数==通路
if(path[0][i]<1000)
count++;
printf("The shortest distance from 0 to orthers\n");
or[0]=1;//已在集合
for(j=0;j<count;j++)
{
temp=choose(path,0,or);
for(i=0;i<M;i++)
{
if(path[0][i]>path[temp][i]+distance[temp])
path[0][i]=path[temp][i]+distance[temp];
}
}
for(i=0;i<M;i++)
if(path[0][i]<1000)
printf("0---------->%d short path is %d\n",i,path[0][i]);
}