您的位置:首页 > 编程语言 > Go语言

poj 2472 106 miles to Chicago

2011-05-03 21:33 489 查看
边的权为不被抓住的概率,注意是概率,需要求的是能逃跑的最大可能

这题与一般的最短路不同,体现在权值上

所以把一般权值的相加改成相乘,利用floyed的算法框架求解

另外注意精度

#include<stdio.h>
#include<string.h>
#define MAXN 101
double map[MAXN][MAXN];	//边权用浮点数存
int n, m;
void floyed(){
for(int k = 0; k < n; ++k)
for(int i = 0; i < n; ++i){
if(i == k)
continue;
for(int j = 0; j < n; ++j){
if(j == i || j == k)
continue;
if(map[i][k] * map[k][j] > map[i][j] && map[i][k] && map[k][j])
map[i][j] = map[i][k] * map[k][j];
}
}
}
int main(){
while(scanf("%d",&n) == 1, n){
scanf("%d",&m);
int a, b;
double w;
for(int i = 0; i <= n; ++i)
for(int j = 0; j <= n; ++j)
map[i][j] = 0;
memset(map, 0.0, sizeof(map));
for(int i = 0; i < m; ++i){
scanf("%d%d%lf",&a, &b, &w);
map[a - 1][b - 1] = map[b - 1][a - 1] = 0.01 * w;
}
floyed();
printf("%.6lf percent/n",map[0][n - 1] * 100);
}
return 0;
}
 

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 框架