畅通工程续floyd

来源:互联网 发布:淘宝买lol账号流程 编辑:程序博客网 时间:2024/06/05 02:23
#include<iostream>#include<cstring>#include<cstdio>#define INF 0x3f3f3fusing namespace std;int map[1005][1005];int n,m,s,t;void floyd(){int i,j,k;cin>>s>>t;for(k=0;k<=n-1;k++)//floyd核心步骤 for(i=0;i<=n-1;i++){if(map[i][k]<INF){for(j=0;j<=n-1;j++){if(map[k][j]<INF&&map[i][j]>map[i][k]+map[k][j])map[i][j]=map[i][k]+map[k][j];}}}if(map[s][t]<INF)cout<<map[s][t]<<endl;elsecout<<"-1"<<endl;return ;}int main(){int i,j,u,v,w;while(cin>>n>>m){for(i=0;i<=n-1;i++)//初始化map[][]数组     for(j=0;j<=n-1;j++)    map[i][j]=INF;        for(i=0;i<=n-1;i++)//注意别少了这一步     map[i][i]=0;    /*解释:如k=1,i=2,j=2;时map[2][1]+map[1][2]<map[2][2]就会对map[2][2]进行更新,其结果显然不为0,而正常情况下,map[2][2]应为0所以不能少了for(i=0;i<=n-1;i++)            map[i][i]=0;这一步*/     for(i=1;i<=m;i++)//输入数据     {    cin>>u>>v>>w;    if(map[u][v]>w)//防止两点之间出现多条路径的情况出现     {    map[u][v]=w;map[v][u]=w;    }    }    floyd();/*cin>>s>>t;for(k=0;k<=n-1;k++)//floyd核心步骤 for(i=0;i<=n-1;i++){if(map[i][k]<INF){for(j=0;j<=n-1;j++){if(map[k][j]<INF&&map[i][j]>map[i][k]+map[k][j])map[i][j]=map[i][k]+map[k][j];}}}*/ /*for(i=0;i<=n-1;i++){for(j=0;j<=n-1;j++)cout<<map[i][j]<<" ";cout<<endl;}*//*if(map[s][t]<INF)cout<<map[s][t]<<endl;elsecout<<"-1"<<endl;*/ }return 0;} 

0 0
原创粉丝点击