poj 1125:Stockbroker Grapevine

来源:互联网 发布:怎么下载安装python 编辑:程序博客网 时间:2024/06/06 15:02
解题思路:

floyd算法,求解最短路径

    (1)二维矩阵每一对顶点的最短距离。  

    (2)依次扫描每一个点,以其为基点再遍历所有每一对顶点之间距离的值,检查是否可通过该基点让这对顶点间的距离更小。

(3)注意算法中循环嵌套的顺序。

#include<iostream>#include<cmath>using namespace std;int dis[110][110];const int inf = 20;int n,m;int maxTime;int startMan;void floyd(){for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)if(i!=j)dis[i][j] = min(dis[i][j],dis[i][k]+dis[k][j]);for(int i=1;i<=n;i++){int maxPath = 0;for(int j=1;j<=n;j++)if(i!=j)maxPath = max(maxPath,dis[i][j]);if(maxPath < maxTime){maxTime = maxPath;startMan = i;}}if(maxTime==inf)cout<<"disjoint"<<endl;elsecout<<startMan<<" "<<maxTime<<endl;return;}int main(){while(true){cin>>n;if(n==0)break;for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)dis[i][j] = inf;for(int i=1;i<=n;i++)dis[i][i] = 0;for(int i=1;i<=n;i++){cin>>m;for(int j=1;j<=m;j++){int p,q;cin>>p>>q;dis[i][p] = q;}}maxTime = inf;startMan = 0;floyd();}return 0;}


0 0