poj2472

来源:互联网 发布:nvidia控制面板优化 编辑:程序博客网 时间:2024/04/28 06:09

使用弗洛伊德算法计算最短路径, 简单题,(spfa 应该是效率最高的吧....虽然不太清楚原理)

    #include <iostream>    #include <stdio.h>    using namespace std;    const int maxn = 100 + 10;    double map[maxn][maxn];    int n,m;    void init()    {    //memset(map,-1,sizeof(map));    for(int i = 0;i < maxn;i++)    for(int j = 0;j < maxn;j++)    map[i][j] = -1.0;    int a,b;    double pro;    for(int i = 1;i <= m;i++)    {    scanf("%d%d%lf",&a,&b,&pro);    //cin>>a>>b>>pro;    map[a][b] = pro/100;    map[b][a] = pro/100;    }    }    void solve()    {    for(int k = 1;k <= n;k++)    for(int i = 1;i <= n;i++)    for(int j = 1;j <= n;j++)    if(i != j && i != k && j != k)    if(-1==map[i][j] && map[i][k] > 0 && map[k][j] > 0)    map[i][j] = map[i][k] * map[k][j];    else if(map[i][j] < map[i][k] * map[k][j] && map[i][k] > 0 && map[k][j] > 0)    map[i][j] = map[i][k] * map[k][j];    double res = 100 * map[1][n];    printf("%.6lf percent\n",res);    }    int main()    {    scanf("%d",&n);    while(n > 0)    {    scanf("%d",&m);    init();    solve();    scanf("%d",&n);    }    return 0;    }


0 0
原创粉丝点击