void hfloyd(h &a)//floyd实现两点最短路径利用友元函数实现
{
int i,j,k;
for(i=1;i<=a.adnum;i++)//初始化路径数组
for(j=1;j<=a.adnum;j++)
{
a.dist[i][j]=a.arc[i][j];
if(a.dist[i][j]<50000)
a.path[i][j]=a.ad[i]+a.ad[j];
else a.path[i][j]=" ";
}
for(k=1;k<=a.adnum;k++) //依次加入每个顶点
for(i=1;i<=a.adnum;i++)
for(j=1;i<=a.adnum;j++)
if(a.dist[i][k]+a.dist[k][j]<a.dist[i][j])
{
a.dist[i][j]=a.dist[i][k]+a.dist[k][j];
a.path[i][j]=a.path[i][k]+a.path[k][j];
}
}
{
int i,j,k;
for(i=1;i<=a.adnum;i++)//初始化路径数组
for(j=1;j<=a.adnum;j++)
{
a.dist[i][j]=a.arc[i][j];
if(a.dist[i][j]<50000)
a.path[i][j]=a.ad[i]+a.ad[j];
else a.path[i][j]=" ";
}
for(k=1;k<=a.adnum;k++) //依次加入每个顶点
for(i=1;i<=a.adnum;i++)
for(j=1;i<=a.adnum;j++)
if(a.dist[i][k]+a.dist[k][j]<a.dist[i][j])
{
a.dist[i][j]=a.dist[i][k]+a.dist[k][j];
a.path[i][j]=a.path[i][k]+a.path[k][j];
}
}