2017.9.25 社交网络 思考记录
来源:互联网 发布:linux vsftpd配置详解 编辑:程序博客网 时间:2024/06/05 07:11
这个题一开始可能有点懵逼,但手玩一会就会好很多
首先这些小问题都是可以独立解决的
1:求多源最短路 —— floyd
2:怎么求每个v? ——枚举v,在枚举i、j。。而且还可以通过f判断在不在最短路上
3:求两点间路径总数 —— 相等直接在floyd上加新的组合、不相等直接覆盖
要证明这么做的正确性,可以用floyd的正确性
反证法:
因为路径条数和最短路同时更新,所以如果这么做会有遗漏,则说明两点之间的距离floyd没有更新到, 说明最短路是错的,, 不成立
所以是正确的、、(不是很清楚原理就只能用正确性证了、、)
码:
#include<iostream>#include<cstdio>using namespace std;double f[202][202],cnt[202][202],ans[202];int a,b,c,n,m,i,j,k;int main(){for(i=0;i<=200;i++)for(j=0;j<=200;j++)f[i][j]=10000000009;scanf("%d%d",&n,&m);for(i=1;i<=m;i++){scanf("%d%d%d",&a,&b,&c);f[a][b]=f[b][a]=c;cnt[a][b]=cnt[b][a]=1;}for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(i==j||j==k||i==k)continue;if(f[i][k]+f[k][j]==f[i][j])cnt[i][j]+=cnt[i][k]*cnt[k][j];if(f[i][k]+f[k][j]<f[i][j]){f[i][j]=f[i][k]+f[k][j];cnt[i][j]=cnt[i][k]*cnt[k][j];}} for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++){if(i==j||i==k||j==k)continue;if(f[i][k]+f[k][j]==f[i][j]){ans[k]+=cnt[i][k]/cnt[i][j]*cnt[k][j];}}for(i=1;i<=n;i++)printf("%.3lf\n",ans[i]);}
阅读全文
0 0
- 2017.9.25 社交网络 思考记录
- 《社交网络》激发的思考
- 社交网络的可引导性思考
- “走饭”引发的思考:社交网络与虚拟遗产
- 社交网络
- “社交网络”
- 社交网络
- 社交网络
- 2017.10.11 network 网络扩容 思考记录
- 推荐算法:社交化网络:社交网络
- 关于社交网站的思考
- 2017.9.4 Nim 思考记录
- 2017.9.6 礼物 思考记录
- 2017.9.6 外星人 思考记录
- 2017.9.7 骑士 思考记录
- 2017.9.9 股票交易 思考记录
- 2017.9.10 ricehub 思考记录
- 2017.9.11 海拔 思考记录
- Eclipse中Maven项目执行Maven update project 项目JRE System Library变为1.5的解决办法
- C和C++中函数指针的用法
- 深入Java集合学习系列:HashSet的实现原理
- ???Minimum Distance in a Star Graph
- HDOJ2011
- 2017.9.25 社交网络 思考记录
- 近期博客写于简书
- 第二十一节HTML5
- 机器学习——矩阵知识复习
- 官网Nginx下载
- LeetCode:M-105. Construct Binary Tree from Preorder and Inorder Traversal
- HDOJ2012
- Flowers
- 二次作业2