memset(v,0,sizeof(v));
for(int i=0;i<n;i++) d[i]=(i==0?0:INF);
for(int i=0;i<n;i++){
int x,m=INF;
for(int y=0;y<n;y++){
if(!v[y]&&d[y]<=m)
m=d[x=y];
}
v[x]=1;
for(int y=0;y<n;y++)
d[y]=min(d[y],d[x]+w[x][y]);
}
若要打印最短路径,可使用如下代码:
if(d[y]>d[x]+w[x][y]){
d[y]=d[x]+w[x][y];
fa[y]=x;
}