首页 > 其他 > 详细

Implementation:Dijkstra

时间:2014-04-16 07:42:03      阅读:495      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
#include <iostream>
#include <cstdlib>
#include <utility>
#include <queue>

using namespace std;

typedef pair<int, int> P;

int main() {
    // zero means no connection
    int graph[5][5] =   {
                            0, 1, 5, 0, 0,
                            0, 0, 3,10, 9,
                            0, 0, 0, 5, 0,
                            0, 1, 0, 0, 1,
                            0, 0, 0, 0, 0,
                        };

    priority_queue<pair<P, P>, vector<P>, greater<P> > que;

    vector<int> vd(5, INT_MAX); // min distance from source to each vertex
    que.push(make_pair(0, 0));  // start from 0
    vd[0] = 0;
    
    while (!que.empty()) {
        P cv = que.top();
        que.pop();
        if (cv.second != vd[cv.first]) continue;
        for (int i=0; i<5; i++) {
            if (cv.first == i || graph[cv.first][i] == 0) continue;
            int dst = graph[cv.first][i] + vd[cv.first];
            if (dst < vd[i]) {
                vd[i] = dst;
                que.push(make_pair(i, dst));
            }
        }
    }

    for (int i=0; i<5; i++)
        cout<<i<<":"<<vd[i]<<endl;
        
    system("pause");
    return 0;
}
bubuko.com,布布扣

求单源最短路径,只能处理没有负边的情况,因为它假设每次从上一个最近节点扫描(与它相邻的节点)中都可以获得下一个最近的节点(有负边的话,可能在其他的扫描中该节点可以有更短的距离),这里使用优先队列从候选节点中获得这个最近节点

Implementation:Dijkstra,布布扣,bubuko.com

Implementation:Dijkstra

原文:http://www.cnblogs.com/lailailai/p/3667134.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!