• 回家(洛谷 P1592)


    模板题。。

    传送门:codevs 1079

    思路 :以 Z 为起点 直接跑一边SPFA , 看哪一头母牛距离Z点最近 , 最后找出Z 到 A~Y 的最短路 (因为仅有A~Z有奶牛)

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #define Max 300000
    #define INF 100000000
    using namespace std;
    int N, Count;
    int head [Max], dis [Max], queue [Max];
    bool visit [Max];
    struct node 
    {
        int to;
        int dis;
        int next;
    }Edge [Max];
    void AddEdge (int x, int y, int w)
    {
        Count++;
        Edge [Count].to = y;
        Edge [Count].dis = w;
        Edge [Count].next = head [x];
        head [x] = Count;
    }
    void SPFA (int start)
    {
        int head_cur = 0, tail_cur = 1;
        for (int i = 1; i <= 123; i++)
        {
            dis [i] = INF;
            visit [i] = false;
        }
        dis [start] = 0;
        queue [1] = start;
        while (head_cur <= tail_cur)
        {
            head_cur++;
            int now = queue [head_cur];
            for (int i = head [now]; i; i = Edge [i].next)
                if (dis [now] + Edge[i].dis < dis [Edge [i].to])
                {
                    dis [Edge [i].to] = dis [now] + Edge[i].dis ;
                    if (visit [Edge[i].to ] == false)
                    {
                        queue [++tail_cur] = Edge [i].to;
                        visit [Edge[i].to ] = true;
                    }
                }
            visit [now] = false;
        }
    }
    int main()
    {
        ios :: sync_with_stdio (false);
        cin >> N;
        char x, y; 
        int w;
        for (int i = 1; i <= N; i++)
        {
            cin >> x >> y >> w;
            AddEdge ((int) (x), (int) (y), w);   //直接用 字母 的Ascll 码 作为节点即可 
            AddEdge ((int) (y), (int) (x), w);
        }
        SPFA ((int)'Z');
        int flag, Maxn = INF;
        for (int i = 'A'; i <= 'Y'; i++)  //因为只有A ~ Y 有母牛,所以只需查找这些点即可  
        {
            if (dis [i] < Maxn)  
            {
                Maxn = dis [i];   
                flag = i;    //找出距离最短的点 
            }
        }
        cout << (char)flag << " " << dis [flag]; 
        return 0;
    }
  • 相关阅读:
    正则表达式
    [创业指南]给海归技术创业兄弟的九个忠告
    about avast
    设计模式Hibernate
    job desc
    把INT转换成2进制等
    微服务调用跟踪
    Redis 分布式锁实现
    jquery中的$.ajax()方法
    订单从ftp写入到b2b
  • 原文地址:https://www.cnblogs.com/ZlycerQan/p/6063282.html
Copyright © 2020-2023  润新知