弗洛伊德算法

来源:互联网 发布:保利投资顾问待遇知乎 编辑:程序博客网 时间:2024/05/22 06:39
#include<stdio.h>#include<vector>//适用于点数不超过200的题。点数多容易炸,不建议使用using namespace std;const int inf=0xffffff;int d[1005][1005],m,n;void floyd(){int k,i,j;for(k=1;k<=n;k++)//如果存在顶点k,使得以k作为中介点时顶点i,顶点j的当前距离缩短,则使用顶点k作为顶点i和顶点j的中介点for(i=1;i<=n;i++)for(j=1;j<=n;j++)if(d[i][k]!=inf&&d[k][j]!=inf&&d[i][k]+d[k][j]<d[i][j])    d[i][j]=d[i][k]+d[k][j];}int main(){int u,v,f,i;while(~scanf("%d%d",&n,&m)&&(n!=0&&m!=0)){fill(d[0],d[0]+1005*1005,inf);for(i=0;i<=n;i++)d[i][i]=0;for(i=1;i<=m;i++){scanf("%d%d%d",&u,&v,&f);d[u][v]=f;d[v][u]=f;}floyd();printf("%d\n",d[1][n]);}}

原创粉丝点击