【分析】
裸的floyd!
【代码】
//poj 1125 Stockbroker Grapevine
#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<stack>
#define fo(i,j,k) for(i=j;i<=k;i++)
#define inf 1000000000
using namespace std;
int dis[101][101],ans[101];
int main()
{
int i,j,k,u,v,d,n,m;
while(scanf("%d",&n) && n)
{
int mi,t;
fo(i,1,100) fo(j,1,100) dis[i][j]=inf;
memset(ans,0,sizeof ans);
fo(i,1,n)
{
scanf("%d",&m);
fo(j,1,m)
{
scanf("%d%d",&v,&d);
dis[i][v]=d;
}
}
fo(k,1,n)
fo(i,1,n)
fo(j,1,n)
if(i!=j && j!=k && i!=k)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
fo(i,1,n)
{
mi=0;
fo(j,1,n)
if(i!=j)
mi=max(mi,dis[i][j]);
ans[i]=mi;
}
mi=inf;
fo(i,1,n)
if(ans[i]<mi)
{
mi=ans[i];
t=i;
}
if(mi==inf) printf("disjoint\n");
else printf("%d %d\n",t,mi);
}
return 0;
}

本文深入讲解了Floyd算法的应用,通过解决poj1125 Stockbroker Grapevine问题,展示了如何利用该算法寻找节点间最短路径。文章包含了完整的代码实现及注释解释。

938

被折叠的 条评论
为什么被折叠?



