zoukankan      html  css  js  c++  java
  • hdu 2112 HDU Today (floyd算法)

    这道题貌似在原来学长给我们的搞的小比赛中出过!

    这次又让我遇到,果断拿下!

    不过方法很蠢,跑了1000多ms,虽然要求5000ms以内!

    题目就是给你一些位置之间的距离,然后再让你求特定的两点之间的距离!就是个样子滴!

    只不过这道题更切合实际,给你的位置是字符串!

    我的处理方法是将字符串转化为数字,数字不就是我们最熟悉的了吗!嘎嘎嘎···················

    #include<stdio.h>

    #include<string.h>
    #define MAX 1000000000000

    int main()
    {
        __int64 map[200][200],i,j,k,n,m,r,t,s;
        char str[200][200],str1[200],str2[200];
        while(scanf("%I64d",&n)!=EOF&&n>0)
        {
            for(i=0;i<=190;i++)
                for(j=0;j<=190;j++)
                    map[i][j]=MAX;
            scanf("%s %s",str1,str2);
            
            strcpy(str[0],str1);
            strcpy(str[1],str2);
            m=2;
            for(j=1;j<=n;j++)
            {
                scanf("%s %s %I64d",str1,str2,&s);
                for(i=0;i<m;i++)//转化的过程
                    if(strcmp(str[i],str1)==0)
                    {
                        r=i;break;
                    }
                    if(i==m)
                    {
                        strcpy(str[m],str1);
                        r=m;
                        m++;
                    }
                    for(i=0;i<m;i++)
                        if(strcmp(str[i],str2)==0)
                        {
                            t=i;break;
                        }
                    if(i==m)
                    {
                        strcpy(str[m],str2);
                        t=m;
                        m++;
                    }
                    if(map[r][t]>s)
                    {
                    map[r][t]=s;
                    map[t][r]=s;
                    }
            }
            if(strcmp(str[0],str[1])==0)//特别注意,始点与终点相同的情况!这点使我wrong了几次!哎···,当知道这个特例时我将这个if语句放在前面了,结果还是wrong了,想了好久//才明白,原来是continue直接跳过了整个循环导致后面的内容输不进来了!囧!!!
            {
                printf("0 ");
                continue;
            }
            for(k=0;k<m;k++)
                for(i=0;i<m;i++)
                    for(j=0;j<m;j++)
                        if(map[i][j]>map[i][k]+map[k][j])
                            map[i][j]=map[i][k]+map[k][j];
                        if(map[0][1]==MAX)
                            printf("-1 ");
                        else
                            printf("%I64d ",map[0][1]);
        }
        return 0;
    }

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112

  • 相关阅读:
    [JAVA安全机制]Java虚拟机-保险沙箱
    计算机网络自顶向下方法第3章-传输层 (Transport Layer).1
    Python基础:一起来面向对象 (二) 之搜索引擎
    Python基础:一起来面向对象 (一)
    计算机网络自顶向下方法第2章-应用层(application-layer).2
    Python基础:lambda 匿名函数
    Python基础:自定义函数
    Python基础:异常处理
    Python基础:条件与循环
    计算机网络自顶向下方法第2章-应用层(application-layer).1
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3249127.html
Copyright © 2011-2022 走看看