zoukankan      html  css  js  c++  java
  • POJ 3255 Roadblocks

    求次短路

    #include <iostream>
    #include <cstdlib>
    #include <cstdio>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <cmath>
    #include <cstring>
    using namespace std;
    #define INF 0xfffffff
    #define maxn 5060
    
    struct Edge
    {
        int e, w;
        Edge(int e=0,int w=0): e(e), w(w) {}
    };
    
    int n, m;
    int dist[2][maxn];
    int vis[maxn];
    
    vector<Edge> G[maxn];
    
    void  Spfa(int Star,int k)
    {
        Edge P, Pn;
        queue <Edge> Q;
        dist[k][Star] = 0;
        Q.push( Edge(Star,0) );
    
        while( !Q.empty() )
        {
            P = Q.front();
            Q.pop();
            vis[P.e] = false;
            int len = G[P.e].size();
    
            for(int i=0; i<len; i++)
            {
                Pn = G[P.e][i];
    
                if(dist[k][Pn.e] > dist[k][P.e] + Pn.w )
                {
                    dist[k][Pn.e] = dist[k][P.e] + Pn.w;
    
                    if(!vis[Pn.e] )
                    {
                        Q.push(Pn);
                        vis[Pn.e] = true;
                    }
                }
            }
        }
    }
    int Slove()
    {
        int ans = INF;
        int Min = dist[0][n];
        Edge P;
        for(int i=1; i<=n; i++)
        {
            int len = G[i].size();
    
            for(int j=0; j<len; j++)
            {
                P = G[i][j];
                int temp = dist[0][i] + dist[1][P.e] + P.w;
                if(temp > Min && temp < ans)
                    ans = temp;
            }
        }
        return ans;
    }
    void Init()
    {
        for(int i=1; i<=n; i++)
        {
            G[i].clear();
            vis[i] = false;
            dist[0][i] = dist[1][i] = INF;
        }
    }
    int main()
    {
        while(cin >> n >> m)
        {
            int a, b, c;
            Init();
            for(int i=0; i<m; i++)
            {
                scanf("%d%d%d",&a,&b,&c);
                G[a].push_back( Edge(b,c) );
                G[b].push_back( Edge(a,c) );
            }
    
            Spfa(1,0);
            Spfa(n,1);
    
            int ans = Slove();
    
            cout << ans << endl;
    
        }
        return 0;
    }
  • 相关阅读:
    leetcode41
    leetcode32
    leetcode312
    leetcode10
    leetcode85
    leetcode124
    leetcode301
    leetcode84
    一文读懂机器学习大杀器XGBoost原理
    【干货】机器学习中的五种回归模型及其优缺点
  • 原文地址:https://www.cnblogs.com/chenchengxun/p/4176986.html
Copyright © 2011-2022 走看看