《算法导论》笔记 第24章 24.3 Dijkstra 算法

本文详细介绍了Dijkstra算法,通过二项堆实现优先队列,达到O((V+E)lgV)的时间复杂度。当所有顶点都从源点可达时,算法的时间复杂度为O(ElgV)。此外,文章还包含了多个练习题供读者实践。
摘要由CSDN通过智能技术生成

【笔记】


用二项堆实现优先队列O((V+E)lgV),所有顶点都从源点可达的话,O(ElgV)。

const int maxn=11111;  
const int maxm=1111111;  
  
struct EdgeNode{  
    int to;  
    int w;  
    int next;  
};  
  
struct HeapNode{  
    int d,u;  
    bool operator<(const HeapNode& rhs) const{  
        return d>rhs.d;  
    }  
};  
  
struct Dijkstra{  
    EdgeNode edges[maxm];  
    int head[maxn];  
    int edge,n;  
    void init(int n){  
        this->n=n;  
        memset(head,-1,sizeof(head));  
        edge=0;  
    }  
    void addedges(int u,int v,int c){  
        edges[edge].w=c,edges[edge].to=v,edges[edge].next=head[u],head[u]=edge++;  
    }  
    bool done[maxn];  
    int dis[maxn];  
    int pre[maxn];  
    void dijkstra(int s){  
        priority_queue<HeapNode>que;  
        for (int i=0;i<n;i++) dis[i]=INF;  
        dis[s]=0;  
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值