zoukankan      html  css  js  c++  java
  • 贪心

    poj 2387 dijkstra

    #include <iostream>
    #include <vector>
    using namespace std;
    /**
     * poj 2387 link: http://poj.org/problem?id=2387
     */
    
    int main(){
        int T, N;
        /**
         * 赋值INF要注意一定要够大
         */
        const int INF = 10000000;
        cin >> T >> N;
        vector<vector<int> > m(N + 1, vector<int>(N + 1, INF));
        vector<int> dist(N + 1, INF);
        vector<bool> visit(N+1, false);
        int s, e, d;
        while(T > 0){
            cin >> s >> e >> d;
            m[s][e] = m[e][s] = min(d,  m[e][s]);
            T--;
        }
        int origin = 1;
        
        for(int i = 1; i <= N; i++){
            dist[i] = m[origin][i];
        }
    
        dist[origin] = 0;
        visit[origin] = true;
    
        for(int c = 0; c < N; c++){
            int mini = INF;
            int idx = 1;
            for(int i = 1; i <= N; i++){
                if(!visit[i] && dist[i] < mini){
                    mini = dist[i];
                    idx = i;
                }
            }
            visit[idx] = true;
            for(int i = 1; i <= N; i++){
                if(!visit[i] && dist[idx] + m[idx][i] < dist[i]){
                    dist[i] = dist[idx] + m[idx][i];
                }
            }
        }
    
        cout << dist[N] << endl;
    
        return 0;
    }
    
    #include <iostream>
    using namespace std;
    /**
     * http://poj.org/problem?id=1251
     */
    const int maxN = 30;
    const int INF = 0x3f3f3f3f;
    int m[maxN][maxN];
    int dist[maxN];
    bool visit[maxN];
    int n;
    int prim(){
        int start = 0;
        int idx;
        int ans = 0;
        for(int i =0; i < n; i++) dist[i] = m[0][i]; 
        visit[start] = true;
    
        for(int c = 1; c < n; c++){
            int mini = INF;
            for(int i = 0; i < n; i++){
                if(!visit[i] && dist[i] < mini){
                    mini = dist[i];
                    idx = i;
                }
            }
    
            visit[idx] = true;
            ans += mini;
            for(int i = 0; i < n; i++){
                if(!visit[i] && m[idx][i] < dist[i]){
                    dist[i] = m[idx][i];
                }
            }
        }
    
        return ans;
    }
    
    int main(){
    
        int  c, l;
        char s, e;
        while(cin >> n, n){
            
            
            for(int i = 0; i < n; i++){
                visit[i] = false;
                for(int j = 0; j < n; j++){
                    m[i][j] = INF;
                }
            }
            int t = n;
            n = n - 1;        
            while(n > 0){
                cin >> s;
                cin >> c;
                   
                while(c > 0){
                    cin >> e >> l;
                    
                    m[s - 'A'][e - 'A'] = m[e - 'A'][s - 'A'] = l;
                    c--;
                }
    
                n--;
                
            }
    
            n = t;
            for(int i = 0; i < n; i++) dist[i] = INF;
    
            cout << prim() << endl;
        }
        
        return 0;
    }
    
  • 相关阅读:
    am335x gpio控制
    递归删除子目录下所有.la后缀文件
    linphone 在am335x的编译过程
    linphone 调试信息
    【POJ 3020】Antenna Placement(二分图匹配)
    【POJ 1062】昂贵的聘礼(最短路)
    【POJ 2485】Highways(Prim最小生成树)
    【Gym 100947E】Qwerty78 Trip(组合数取模/费马小定理)
    解决already defined in .obj 的问题(定义/声明的区别)
    C语言+SDL2 图形化编程
  • 原文地址:https://www.cnblogs.com/qbits/p/11435972.html
Copyright © 2011-2022 走看看