zoukankan      html  css  js  c++  java
  • Dijkstra算法:POJ No 3268 Silver Cow Party

    题目:http://poj.org/problem?id=3268

    题解:使用 priority_queue队列对dijkstra算法进行优化

    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <queue>
    #include <functional>
    #include <cstring>
    using namespace std;
    
    const int MAX_V  = 1024 + 10;
    const int INF = 99999999;
    
    struct edge 
    {
        int to, cost;
        edge() {}
        edge(int to, int cost) : to(to), cost(cost) {}
    };
    typedef pair<int, int> P;  //first 最短路径, second顶点编号
    vector<edge> G[MAX_V];     //
    int d[MAX_V][MAX_V];       //最短距离
    int V, E, X;               //V顶点数,E是边数
     
    //求解从顶点s出发到所有点的最短距离
    void dijkstra(int s)
    {
        //升序 
        priority_queue<P, vector<P>, greater<P> > que;
        memset(d[s], 0x3f, MAX_V * sizeof(int));
        d[s][s] = 0;
        que.push(P(0, s));   //最短路径,顶点编号 
        
        while (!que.empty())
        {
            //每次出队最小的 
            P p = que.top(); que.pop();
            int v = p.second;          //编号 
            
            if (d[s][v] < p.first) continue;
            
            for (unsigned i = 0; i < G[v].size(); ++i)
            {
                edge e = G[v][i];   //与v临边的顶点
                // d[s][e.to]经过 v 再经过其他的临边 
                if (d[s][e.to] > d[s][v] + e.cost) 
                {
                    d[s][e.to] = d[s][v] + e.cost;
                    que.push(P(d[s][e.to], e.to));
                }
            }
        }
    }
    
    void solve()
    {
        cin >> V >> E >> X;
        --X;
        int s, t, ct;
        while (E--) 
        {
            cin >> s >> t >> ct;
            --s; --t;
            G[s].push_back(edge(t, ct));
        }
        
        for (int i = 0; i < V; i++) {
            dijkstra(i);
        }
        
        int ans = 0;
        for (int i = 0; i < V; ++i) {
            if (i == X) continue;
            
            ans = max(ans, d[i][X] + d[X][i]);
        }
        
        printf("%d
    ", ans);
    }
     
    int main()
    {
        solve();
        
        return 0;
        
    }
  • 相关阅读:
    centos 7.5搭建oracle DG
    oracle 11g修改归档日志目录及大小
    oracle修改数据文件路径
    oracle 11g调优常用语句
    MySQL MHA安装配置
    mysql中的数据库操作
    mysql 中用户与权限的操作
    percona server安装
    mysql配置文件相关
    条件判断中的真假
  • 原文地址:https://www.cnblogs.com/douzujun/p/6891854.html
Copyright © 2011-2022 走看看