zoukankan      html  css  js  c++  java
  • 1375. 奶牛回家

    点数为(52),可以用(floyd)求出其他点到终点的距离,选择到终点距离最小的点输出即可。

    const int N = 55;
    int g[N][N];
    int n=52,m;
    
    int get(char c)
    {
        if(isupper(c)) return c-'A';
        return c-'a'+26;
    }
    
    void floyd()
    {
        for(int k=0;k<n;k++)
            for(int i=0;i<n;i++)
                for(int j=0;j<n;j++)
                    g[i][j]=min(g[i][j],g[i][k]+g[k][j]);
    }
    
    int main()
    {
        cin>>m;
    
        memset(g,0x3f,sizeof g);
        for(int i=0;i<n;i++) g[i][i]=0;
        
        while(m--)
        {
            char a,b;
            int c;
            cin>>a>>b>>c;
            int x=get(a),y=get(b);
            g[x][y]=g[y][x]=min(g[x][y],c);
        }
    
        floyd();
    
        int res=0;
        for(int i=0;i<25;i++)
            if(g[i][25] < g[res][25])
                res=i;
    
        cout<<char(res+'A')<<' '<<g[res][25]<<endl;
        //system("pause");
        return 0;
    }
    

    由于是无向图,所以可求出终点距离其余点的距离,这个距离和从其余点到终点的距离是相等的。

    用单源最短路(Dijkstra)算法,找到从终点出发距离最近的点。

    const int N = 55;
    int g[N][N];
    int dist[N];
    bool vis[N];
    int n=52,m;
    
    int get(char c)
    {
        if(isupper(c)) return c-'A';
        return c-'a'+26;
    }
    
    void dijkstra(int st)
    {
        memset(dist,0x3f,sizeof dist);
        dist[st]=0;
        
        for(int i=0;i<n;i++)
        {
            int t=-1;
            for(int j=0;j<n;j++)
                if(!vis[j] && (t == -1 || dist[t] > dist[j]))
                    t=j;
            
            vis[t]=true;
            
            for(int j=0;j<n;j++)
                dist[j]=min(dist[j],dist[t]+g[t][j]);
        }
    }
    
    int main()
    {
        cin>>m;
    
        memset(g,0x3f,sizeof g);
        for(int i=0;i<n;i++) g[i][i]=0;
    
        while(m--)
        {
            char a,b;
            int c;
            cin>>a>>b>>c;
            int x=get(a),y=get(b);
            g[x][y]=g[y][x]=min(g[x][y],c);
        }
    
        dijkstra(25);
    
        int res=0;
        for(int i=0;i<25;i++)
            if(dist[i] < dist[res])
                res=i;
    
        cout<<char(res+'A')<<' '<<dist[res]<<endl;
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    企业财务分析一头雾水?有了这个财务报表工具,问题一键解决
    解决wamp 3.0.6 访问路径出现 403 错误
    解决wamp 3.0.6 访问路径出现 403 错误
    解决wamp 3.0.6 访问路径出现 403 错误
    区间树
    区间树
    区间树
    区间树
    阿里云弹性裸金属服务器-神龙架构(X-Dragon)揭秘
    阿里云弹性裸金属服务器-神龙架构(X-Dragon)揭秘
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14882106.html
Copyright © 2011-2022 走看看