pku 1125
2011-04-09 20:59
162 查看
Floyd算法简介:
连接任何两个点i和j,假设通过第三个点k,如果a[i][j]>a[i][k]+a[k][j],则a[i][j]=a[i][k]+a[k][j];也就是说,如果原来i和j之间的距离大于i到k与k到j距离之和,那么i和j之间的最短距离就要发生改变。
这个题理解起来有点难度,其实是要求出由某个人向其他所有人发短信所用的最短时间,而一个人完成这项工作最快用时是由他人发短信花费最长时间决定的。于是,可以先用Floyd算法求出从i到j的最短联通时间a[i][j],然后对应每一个i,求出到j的最长联通时间,最后从这些时间中求出答案。可能听起来不太懂,具体看程序吧。
Floyd第一道!!!!!
源程序:
#include<stdio.h>
#define max 999999
#define N 102
int a
;
int main()
{
int n,v,i,j,k,m,s,t,r,u;
while(scanf("%d",&n)&&(n>0))
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i==j)
a[i][j]=0;
else a[i][j]=max;
}
for(i=1;i<=n;i++)
{
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&s,&t);
a[i][s]=t;
}
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(a[i][j]>a[i][k]+a[k][j])
a[i][j]=a[i][k]+a[k][j];
}
v=max;r=-1;
for(i=1;i<=n;i++)
{
u=-1;
for(j=1;j<=n;j++)
{
if(u<a[i][j])
u=a[i][j];
}
if(u<v)
{
v=u;
r=i;
}
}
if(r==-1)
printf("disjoint\n");
else printf("%d %d\n",r,v);
}
return 0;
}
连接任何两个点i和j,假设通过第三个点k,如果a[i][j]>a[i][k]+a[k][j],则a[i][j]=a[i][k]+a[k][j];也就是说,如果原来i和j之间的距离大于i到k与k到j距离之和,那么i和j之间的最短距离就要发生改变。
这个题理解起来有点难度,其实是要求出由某个人向其他所有人发短信所用的最短时间,而一个人完成这项工作最快用时是由他人发短信花费最长时间决定的。于是,可以先用Floyd算法求出从i到j的最短联通时间a[i][j],然后对应每一个i,求出到j的最长联通时间,最后从这些时间中求出答案。可能听起来不太懂,具体看程序吧。
Floyd第一道!!!!!
源程序:
#include<stdio.h>
#define max 999999
#define N 102
int a
;
int main()
{
int n,v,i,j,k,m,s,t,r,u;
while(scanf("%d",&n)&&(n>0))
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(i==j)
a[i][j]=0;
else a[i][j]=max;
}
for(i=1;i<=n;i++)
{
scanf("%d",&m);
while(m--)
{
scanf("%d%d",&s,&t);
a[i][s]=t;
}
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(a[i][j]>a[i][k]+a[k][j])
a[i][j]=a[i][k]+a[k][j];
}
v=max;r=-1;
for(i=1;i<=n;i++)
{
u=-1;
for(j=1;j<=n;j++)
{
if(u<a[i][j])
u=a[i][j];
}
if(u<v)
{
v=u;
r=i;
}
}
if(r==-1)
printf("disjoint\n");
else printf("%d %d\n",r,v);
}
return 0;
}
相关文章推荐
- pku_1125_Stockbroker Grapevine
- PKU1125 最短路径 Floyd-Warshall算法
- Pku acm 1125 Stockbroker Grapevine 动态规划题目解题报告(十九)
- pku 1125—Stockbroker Grapevine
- 多源最短路pku1125
- pku1125 Stockbroker Grapevine
- pku 1125 strokers
- pku1125 Floyd求每两点间的最短路
- PKU 1125 【简单floyd】
- pku ACM 1125
- pku 1125 Stockbroker Grapevine(Floyd-Warshall)
- pku 1125 Stockbroker Grapevine 第一周训练——最短路
- (最短路-floyd+邻接矩阵)PKU-1125 Stockbroker Grapevine
- 最短路水题= = PKU1125
- pku1125: Stockbroker Grapevine
- Pku acm 1125 Stockbroker Grapevine 数据结构题目解题报告(八)---- 弗洛伊德(floyd)算法
- pku1125 Stockbroker Grapevine
- PKU ACM 1125
- 开始做图论题目“Stockbroker Grapevine”PKU1125
- pku1125 Stockbroker Grapevine