• hdu 1874 畅通工程 【spfa and dijkstra实现】


    题目

    spfa: 

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 205;
    const int INF = 0x3f3f3f3f;
    vector <pair<int,int> > E[maxn];
    
    int n,m;
    int d[maxn],inq[maxn];
    //d[maxn]起点到终点的距离,inq[maxn]记录这个东西是否在队列里
    void init()
    {
        for(int i=0;i<maxn;i++) E[i].clear();
        memset(inq,0,sizeof(inq));
        memset(d,0x3f,sizeof(d));
    }
    int main()
    {
       // freopen("input.txt","r",stdin);
        while(cin>>n>>m)
        {
            init();
            for(int i=0;i<m;i++)
            {
                int x,y,z;scanf("%d%d%d",&x,&y,&z);
                E[x].push_back(make_pair(y,z));
                E[y].push_back(make_pair(x,z));
            }
                int s,t;
                scanf("%d%d",&s,&t);
                queue<int> Q;
                Q.push(s),d[s]=0,inq[s]=1;
                while(!Q.empty())
                {
                    int now = Q.front();
                    Q.pop();inq[now]=0;
                    for(int i=0;i<E[now].size();i++)
                    {
                        int v = E[now][i].first;
                        if(d[v]>d[now]+E[now][i].second)
                        {
                            d[v]=d[now]+E[now][i].second;
                            if(inq[v]==1) continue;
                            inq[v]=1;
                            Q.push(v);
                        }
                    }
                }
                if(d[t]==INF) printf("-1
    ");
                else printf("%d
    ",d[t]);
        }
        return 0;
    }
    

    dijkstra:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 205;
    const int INF = 0x3f3f3f3f;
    typedef pair<int,int> P;
    vector <P> E[maxn];
    
    int n,m;
    int d[maxn];
    //d[maxn]起点到终点的距离
    void init()
    {
        for(int i=0;i<maxn;i++) E[i].clear();
        memset(d,0x3f,sizeof(d));
    }
    int main()
    {
       // freopen("input.txt","r",stdin);
        while(cin>>n>>m)
        {
            init();
            for(int i=0;i<m;i++)
            {
                int x,y,z;scanf("%d%d%d",&x,&y,&z);
                E[x].push_back(P(y,z));
                E[y].push_back(P(x,z));//make_pair(x,z)
            }
    
            int s,t;
            scanf("%d%d",&s,&t);
            priority_queue<P ,vector<P>,greater<P> > Q;
            d[s]=0;
            Q.push(P(d[s],s));
            while(!Q.empty())
            {
                int now = Q.top().second;
                Q.pop();
                for(int i=0;i<E[now].size();i++)
                {
                    int v = E[now][i].first;
                    if(d[v]>d[now]+E[now][i].second)
                    {
                        d[v]=d[now]+E[now][i].second;
                        Q.push(P(d[v],v));
                    }
                }
            }
            if(d[t]==INF) printf("-1
    ");
            else printf("%d
    ",d[t]);
    }
        return 0;
    }
    
  • 相关阅读:
    洛谷——P1951 收费站_NOI导刊2009提高(2)
    洛谷——P1475 控制公司 Controlling Companies
    洛谷——P1176 路径计数2
    洛谷——P1156 垃圾陷阱
    洛谷——P2734 游戏 A Game
    洛谷——P1767 家族_NOI导刊2010普及(10)
    洛谷——P1413 坚果保龄球
    Kali-linux破解LM Hashes密码
    Kali-linux分析密码
    Kali-linux密码在线破解
  • 原文地址:https://www.cnblogs.com/qie-wei/p/10160168.html
Copyright © 2020-2023  润新知