POJ1125 股市谣言传播 图论(Floyd最短路)
来源:互联网 发布:centos 7 解压缩tar 编辑:程序博客网 时间:2024/06/04 01:05
题目概述:
这道题的大意是说,在股市中特定的人之间都有各自的联系,且对于每一条关系,从一个人传递谣言到另一个人的时间是不同的。然后我们的目标是要散布一条谣言,判断出应该从谁开始传播,才可以让这条谣言传播完整个人际关系网络,并且算出传递到最后一个人的时间是多少。
另外说一句,这道题的数据非常弱的,估计没有多少个超过20的点的图。而且看别人的博客也没有输入非连通的情况。
算法思想:
因为这明显是一个图求最短路径的题,并且要试一下每一个点为源点的情况,所以我就决定用Floyd来算。
首先把每一个人当作图中的一个顶点,每一个关系当作一条边,这段关系的消息传递时间当作这条边的权重,初始化时候把自己到自己的距离初始为0,其他的都为INF。
然后用佛洛依德算法计算出各点距离。
然后依次枚举每一个点,看从这点到整个网络点的距离的最大值,记下这时候的起点值。
再从这些最大值中取得一个最小的,输出其起点值和这个最小值。
完毕。
代码部分:
#include <iostream>#include <list>#include <map>#include <string.h>#include <string>#include <algorithm>using namespace std;map<string, int> mymap;const int INF = 10000000;int n, m, a, b;double d[117][117];void floyd() {for (int k = 1; k <= n; k++) {for (int j = 1; j <= n; j++) {for (int i = 1; i <= n; i++) {if (d[i][j] > d[i][k] + d[k][j]) d[i][j] = d[i][k] + d[k][j];}}}}int main(){while (cin >> n && n) {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (i != j) d[i][j] = INF;else d[i][j] = 0;}}for (int i = 1; i <= n; i++) {cin >> m;for (int j = 1; j <= m; j++) {cin >> a >> b;d[i][a] = b;}}floyd();int p = INF, q = 0;int y = 0;for (int i = 1; i <= n; i++) {int res = 0;for (int j = 1; j <= n; j++) {if (res <= d[i][j]) {res = d[i][j];q = j;}}if (p >= res) {p = res;y = i;}}if (p!=INF) cout << y <<" "<< p << endl;else cout << "disjoint" << endl;}return 0;}
0 0
- POJ1125 股市谣言传播 图论(Floyd最短路)
- poj1125 最短路floyd
- poj1125(floyd最短路)
- 【最短路】poj1125 Floyd
- poj1125(Floyd)最短路问题
- poj1125(最短路floyd算法)
- POJ1125 Stockbroker Grapevine(最短路floyd算法)
- poj1125 Stockbroker Grapevine 最短路 Floyd 思考
- 谣言的传播-Floyd
- poj1125最短路模板
- 图论-最短路-floyd
- poj1125 floyed 求最短路
- poj1125 Stockbroker Grapevine 最短路
- 【POJ1125】Stockbroker Grapevine 最短路
- 最短路(poj1502 poj3259 poj1125)
- poj1125 Stockbroker Grapevine-最短路
- POJ1125 Stockbroker Grapevine 多源最短路 Floyd
- POJ1125 Stockbroker Grapevine 最短路径(Floyd)
- cin.get() 大法
- 整数拆分问题 ----递归法
- C++中异常处理try-throw-catch
- 整数拆分
- vector的成员函数解析
- POJ1125 股市谣言传播 图论(Floyd最短路)
- C++ STL Map基本函数
- 插入排序算法
- 归并排序算法实现
- 查找最大值最小值问题
- 暴力破解最大数组问题
- 二维数组定义以及动态分配空间
- C++中string的size,length,capacit…
- C++STRING类常用函数