Floyd(求图中任意两点最短路径)
来源:互联网 发布:淘宝宝贝价格下调 编辑:程序博客网 时间:2024/06/11 00:35
题目大意是:有N个人,相互之间可以传递信息,但是A传给B与B传给A的时间是不一样的,一个人同时可以向多个人传递信息,时间不一样,问你把消息传给谁?可以在最短时间让消息传递给所有人。
典型的FLOYD求最短路,最后找到所有人距离最大之最小那一个人,输出答案。
---------------------
问题重述
描述
众所周知,证券经纪业依靠的就是过度的传言。您需要想出股票经纪人中传播假情报的方法,让您的雇主在股票市场的占据优势。为了获得最大的效果,你必须蔓延最快的方式谣言。
不幸的是你,股票经纪人信息只信任他们的“可靠来源”,这意味着你在你传播谣言之前必须考虑到他们的接触结构。它需要特定股票经纪人和一定的时间把谣言传递给他的每一位同事。你的任务将是写一个程序,告诉您选择哪一个股票经纪人作为谣言的出发点和所花费多少时间将谣言扩散到整个社会的股票经纪人。这一期限是衡量过去的人收到信息所需的时间。
输入
你的程序包含多组股票经纪人的输入数据。每组以股票经纪人的人数开始。接下来的几行是每个经纪人与其他人接触的一些信息,包括这些人都是谁,以及将讯息传达到他们所需的时间。每个经纪人与其他人接触信息的格式如下:开头的第一个数表示共有n个联系人,接下来就有n对整数。每对整数列出的第一个数字指的是一个联系人(例如,一个'1'是指编号1的人),其次是在传递一个信息给那个人时所采取分钟的时间。没有特殊的标点符号或空格规则。
每个人的编号为1至经纪人数目。所花费的传递时间是从1到10分钟(含10分种)。股票经纪的人数范围是从1到100。当输入股票经纪人的人数为0时,程序终止。
输出
在对于每一组数据,你的程序必须输出一行,包括的信息有传输速度最快的人,以及在最后一个人收到消息后,所总共使用的时间(整数分钟计算)。
你的程序可能会收到的一些关系会排除一些人,也就是有些人可能无法访问。如果你的程序检测到这样一个破碎的网络,只需输出消息“disjoint”。请注意,所花费的时间是从A传递消息到B,B传递信息到A不一定是花费同样的传递时间,但此类传播也是可能的。
#include<stdio.h> #include<stdlib.h> #include<string.h> const int maxn=110,maxint=1000000000; int d[maxn][maxn]; int main(){ int i,j,k,m,n; int x,y; while(1){ scanf("%d",&n); if(!n)break; for(i=1;i<=n;i++) for(j=1;j<=n;j++) d[i][j]=maxint; for(i=1;i<=n;i++){ scanf("%d",&m); for(j=1;j<=m;j++){ scanf("%d%d",&x,&y); d[i][x]=y; } } for(i=1;i<=n;i++)d[i][i]=0; for(k=1;k<=n;k++) //从i点经过k点到j点 for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(d[i][j]>d[i][k]+d[k][j]) d[i][j]=d[i][k]+d[k][j]; //类似与dp int mins=maxint,maxs; for(i=1;i<=n;i++){ maxs=0; for(j=1;j<=n;j++) if(d[i][j]>maxs) maxs=d[i][j]; if(maxs<mins){ mins=maxs; k=i; } } printf("%d %d\n",k,mins); } return 0; }思路:三层循环枚举i,j,k.更新i点与j点之间的距离 k为桥梁 判断i到k点的距离加上k到j点的距离是否小于之前i到j的距离 是就更新
- Floyd(求图中任意两点最短路径)
- Floyd算法(任意两点间的最短路径)
- POJ 2139-- 最短路径 (floyd算法,任意两点间的最短路径)
- floyd算法(求任意两点间的最短路径)
- 2014东北农大校赛--D.Cross the middle (任意两点最短路径 Floyd)
- Dijkstra单源最短路径实现 及 Floyd任意两点之间的最短路径
- 任意两点之间最短路径
- 任意两点间的最短路径
- 任意两点之间的最短路径问题(Floyd-Warshall算法)
- 运用Floyd算法求得带权有向图任意两点间的最短路径C/C++
- 任意两点之间的最短路径问题(Floyd算法)--Java语言
- Dijkstra [迪杰斯特拉]算法思路(求单点到其他每个点的各个最短路径)Floyd算法:任意两点间最短距离
- AOJ GRL_1_C: All Pairs Shortest Path (Floyd-Warshall算法求任意两点间的最短路径)(Bellman-Ford算法判断负圈)
- pgrouting路径分析(任意两点之间的最短路径)
- 【算法】单源最短路径和任意两点最短路径总结(补增:SPFA)
- 求任意两点间的最短路径
- 任意两点间的最短路径---floyd_warshall算法
- 使用pgrouting求任意两点的最短路径
- mysql优化配置my.cnf
- mapx点击鼠标获取经纬度
- 正则表达式
- 【codeforces709B】 Checkpoints——小水题
- Android.线程池的原理和线程池管理类的使用
- Floyd(求图中任意两点最短路径)
- JavaWeb学习总结(一)---在windows7下卸载JDK
- JAVASE总结--File类
- python_snake
- Linux vi中查找字符内容的方法
- 需求、开发和测试的“三足鼎立”
- JVM垃圾回收算法
- 【NOI OJ】 2.5 搜索 917 Knight Moves(马的移动)
- 终于下定决心好好学学java了