floyd:
void floyd(int n)
{
int i,j,k;
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
}
Prim:
int prim(int n)
{
int i,j,mk,ans=0;
memset(vis,0,sizeof vis);
for(i=2;i<=n;i++)dis[i]=g[1][i];
vis[1]=1;
for(i=2;i<=n;i++)
{
int temp=INF;
for(j=1;j<=n;j++)
if(!vis[j]&&dis[j]<temp)temp=dis[mk=j];
vis[mk]=1ans+=temp;
for(j=1;j<=n;j++)//更新顶点
if(!vis[j]&&g[mk][j]<dis[j])dis[j]=g[mk][j];//dis【】存储未访问点与集合最小距离,此处更新该数组
}
return ans;
}