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\n");
            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\n");
                    else
                        printf("%I64d\n",map[0][1]);
    }
    return 0;
}

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

你可能感兴趣的:(floyd)