“ Ctrl AC!一起 AC!”
Floyd算法用来解决全源最短路径问题:给定图,求任意两点间的最短路径。该算法一般用邻接矩阵解决。
核心思想:
如果存在点k使得点i,j之间的距离更短,那么就更新i,j之间的距离,dis[i][j]表示i,与j之间的距离。
即:if(dis[i][k]+dis[k][j]<dis[i][j]) then dis[i][j]=dis[i][k]+dis[k][j]
const INF=1000000000;
const int MAXV=200;
int n,m; //n为顶点数,m为边数
int dis[MAXV][MAXV];
void Floyd(){
for(int k=0;k<n;k++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(dis[i][k]!=INF&&dis[k][j]!=INF&&dis[i][k]+dis[k][j]<dis[i][j]){
dis[i][j]=dis[i][k]+dis[k][j];
}
}
}
}
}
int main(){
int u,v,w;
fill(dis[0],dis[0]+MAXV*MAXV,INF);
cin>>n>>m;
for(int i=0;i<n;i++){
dis[i][i]=0;
}
for(int i=0;i<m;i++){
cin>>u>>v>>w;
dis[u][v]=w;
}
Floyd();
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
cout<<dis[i][j];
}
cout<<endl;
}
return 0;
}
感谢阅读!!!
“ Ctrl AC!一起 AC!”