题目链接
UVa 821
方法:最短路水题 Floyd-Warshall
题目分析
题目大意
先介绍一个概念,如图所示,有1,2,3,4四个网站,对于每一个箭头,如1→2,表示从网站1可以直接跳转到网站2,那么,从1到3,有两种方式,①1→2→4→3,②1→3,方法①需要跳转三次,方法②跳转1次,显然,从1到3的最少跳转次数是1,其他同理。
那么,给定n个网站的,如果这n个网站中,可以从u跳转到v,每次产生一个跳转次数t,假设可以建立cnt个这种关系,求平均最小跳转次数(期望),也就是求∑ti/cnt
。
解析
由于数据量较小(最多100),并且是多源的,故不能采用dijkstra算法,最简单易行的当属
Floyd-Warshall算法,先全部赋一个比较大的值(INF),然后跑一遍Floyd,再把这个数组遍历一遍,如果mp[u][v]!=INF
,则表示u→v是可以走得通的,mp[u][v]记录从u到v的最少跳转次数。累加这些求平均值即可。
代码
1 |
|