zoukankan      html  css  js  c++  java
  • luogu P2009 跑步

    原题链接:https://www.luogu.org/problem/show?pid=2009

    做这道题的时候,看了一眼数据范围,n<=20,额,一般的Floyd不应该是100—200左右的吗,这个不会是有什么其他算法吧。。。

    仔细审题后,好像没啥问题,直接字符转数字,Floyd直接上,然后就华丽的GG了,50分。

    因为此题有可能有自环,而且每条边都只要最大值,于是就在前面加了一个特判边权不为无限大的时候,就取最大值。

    然而还是不对,仔细看了半天,没看出错来,把手打的一串9改成常量inf后,居然A了,事后才发现,填数组的时候有8个9,判断的时候只输入了7个9。。。。。。

    总体算法不难,注意好一些细节,就是个Floyd板子题

    #include<cstdio>
    const int inf=9999999;
    int e[25][25],w,n,m;
    char s[5],t[5];
    int max(int x,int y)
    {
        return x>y ? x : y;
    }
    int min(int x,int y)
    {
        return x<y ? x : y;
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(i!=j) e[i][j]=inf;
            }
        }
        for(int i=1;i<n;i++)
        {
            scanf("%d",&e[i][i+1]);
            e[i+1][i]=e[i][i+1];
        }
        scanf("%d",&e[n][1]);e[1][n]=e[n][1];
        for(int i=1;i<=m;i++)
        {
            scanf("%s %s %d",s,t,&w);
            int x=s[0]-'A'+1,y=t[0]-'A'+1;
            if(e[x][y]!=inf) e[x][y]=max(e[x][y],w);
            else e[x][y]=w;
            e[y][x]=e[x][y];
        }
        for(int k=1;k<=n;k++)
        {
            for(int i=1;i<=n;i++)
            {
                for(int j=1;j<=n;j++)
                {
                    e[i][j]=min(e[i][j],e[i][k]+e[k][j]);
                    e[j][i]=e[i][j];
                }
            }
        }
        scanf("%s %s",s,t);
        int x=s[0]-'A'+1,y=t[0]-'A'+1;
        printf("%d",e[x][y]);
        return 0;
    }
  • 相关阅读:
    flask_admin+flask_login 整合,jieba分词+echarts数据分析可视化
    古诗词网爬虫实现
    Flask admin Flask login 整合模板
    API网关Kong
    Flask添加新命令
    MyBatis连接MySQL8配置
    golang锁
    golang goroutine
    golang管道
    golang结构体
  • 原文地址:https://www.cnblogs.com/zeroform/p/7582104.html
Copyright © 2011-2022 走看看