zoukankan      html  css  js  c++  java
  • hdu2923 最短路floyd

    建图还是有点烦人的。

    #include<map>
    #include<string>
    #include<stdio.h>
    #include<iostream>
    #include<string.h>
    #define maxn 105
    #define INF 99999999
    using namespace std;
    int g[maxn][maxn],vis[maxn],dis[maxn],n;
    void init()
    {
        int i,j;
        for(i=0;i<=n;i++)
            for(j=0;j<=n;j++)
                if(i==j)g[i][j]=0;
                else g[i][j]=INF;
    }
    void floyd()
    {
        int i,j,k;
        for(i=1;i<=n;i++)
            for(j=1;j<=n;j++)
                for(k=1;k<=n;k++)
                {
                    if(g[j][k]>g[j][i]+g[i][k])
                        g[j][k]=g[j][i]+g[i][k];
                }
    }
    int main()
    {
        int i,j,m,c;
        string ss,se,start;
        char cc[20];
        char item[1005][20];
        int ff=0;
        while(scanf("%d%d%d",&n,&c,&m)!=EOF)
        {
            map<string,int>mp; 
            if(n==0&&c==0&&m==0)
                break;
            init();
            int num=1;
            cin>>start;
            mp[start]=num++;
            
            for(i=1;i<=c;i++)
                scanf("%s",item[i]);
    
            for(i=0;i<m;i++)
            {
                cin>>ss; scanf("%s",cc); cin>>se;
                if(!mp[ss])mp[ss]=num++;
                if(!mp[se])mp[se]=num++;
                int len=strlen(cc);
                int l=0;
                int fr,ed;
                ed=len-2;
                for(fr=2;fr<ed;fr++)
                {
                    l=l*10+cc[fr]-'0';
                }
                //printf("%d
    ",l);
                if(cc[0]=='-')
                {
                    if(g[mp[ss]][mp[se]]>l)
                        g[mp[ss]][mp[se]]=l;
                }
                else if(cc[len-1]=='-')
                {
                    if(g[mp[se]][mp[ss]]>l)
                        g[mp[se]][mp[ss]]=l;
                }
                else {
                    if(g[mp[ss]][mp[se]]>l)
                        g[mp[ss]][mp[se]]=l;
                    if(g[mp[se]][mp[ss]]>l)
                        g[mp[se]][mp[ss]]=l;
                }
            }
            floyd();
            int ans=0;
            printf("%d. ",++ff);
            string st;
            for(i=1;i<=c;i++)
            {
                st="";
                int strl=strlen(item[i]);
                for(j=0;j<strl;j++)
                {
                    st+=item[i][j];
                }
                //cout<<st<<endl;
                ans+=g[mp[start]][mp[st]];
                ans+=g[mp[st]][mp[start]];
            }
            printf("%d
    ",ans);
        }
    }
  • 相关阅读:
    1023. 组个最小数 (20)
    1048. Find Coins (25)
    1050. String Subtraction (20)
    1041. Be Unique (20)
    1047. 编程团体赛(20)
    1043. 输出PATest(20)
    Java基础学习总结(8)——super关键字
    Java基础学习总结(8)——super关键字
    Java基础学习总结(7)——Object类
    Java基础学习总结(7)——Object类
  • 原文地址:https://www.cnblogs.com/sweat123/p/4682688.html
Copyright © 2011-2022 走看看