关闭

hdu1217 floyd

标签: 1217floyd
199人阅读 评论(0) 收藏 举报
分类:

1217 floyd算法 不过算的是相乘的最大值

写完后一直在纠结对不对,因为如果出现ex[i][k] ex[k][j]均为-1时,相乘即为1这样就乱套,但是交了之后过了,  说明测试数据中,并没有给出孤立的国家

如果国家间利率没有联系,则赋为-1

贴上代码:

#include <cstdio>
#include <iostream>
#include <map>
#include <string>
#include <cstring>


using namespace std;
const int C_MAX = 35;
double ex[C_MAX][C_MAX];//ex[u][v]表示u对v的汇率 u-->v
map<string, int> m;
int C,M;

bool floyd()
{
    for(int k=1; k<=C; k++)
    {
        for(int i=1; i<=C; i++)
        {
            for(int j=1; j<=C; j++)
            {
                    ex[i][j] = max(ex[i][j],ex[i][k] * ex[k][j]);
            }
        }
    }
    
    for (int i=1; i<=C; i++)
    {
        if(ex[i][i]>1)return true;

    }
    return false;
}



int main()
{
    int Case = 1;
    while((scanf("%d",&C)!=EOF)&&C){
        for(int i=1;i<=C; i++){
            for(int j=1; j<=C; j++){
                    if(i==j)ex[i][j] = 1;
                    else{ex[i][j] = -1.0;
                }
            }
        }
        string temp;
        int fir, sec;
        double exc;
        for(int i=1; i<=C; i++)
        {
            cin >> temp;
            m[temp] = i;
        }
        scanf("%d",&M);
        for(int i=0; i<M; i++)
        {
            cin >> temp;
            fir = m[temp];
            scanf("%lf",&exc);
            cin >> temp;
            sec = m[temp];
            ex[fir][sec] = exc;
        }

        if(floyd())printf("Case %d: Yes\n", Case);
        else printf("Case %d: No\n",Case);
        Case++;
    }


    return 0;
}




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6968次
    • 积分:268
    • 等级:
    • 排名:千里之外
    • 原创:18篇
    • 转载:10篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档