最短路-Dijkstra+heap

 
  

O(E+V*lgV)

#include 
const int maxn;
struct Heap {
    int p,dis;
    Heap(int _p,int _dis):p(_p),dis(_dis){}    // 构造函数
    bool operator<(const Heap &temp) const{    // 重载'<',维护最小堆
        return dis>temp.dis;
    }
};
int n,dis[maxn],map[maxn][maxn];
bool visit[maxn];

void dijkstra(int original)
{
    memset(visit,0,sizeof(visit));
    memset(dis,INF,sizeof(dis));
    dis[original]=0;
    priority_queue  q;
    q.push(Heap(original,0));   // 初始化

    while(!q.empty()){
        int p=q.top().p;
        q.pop();
        if(visit[p])continue;
        visit[p]=true;
        for(int j=1;j<=n;j++){
            if(dis[p]+map[p][j]


你可能感兴趣的:(图论)