首页 > 其他 > 详细

最短路

时间:2019-07-06 19:22:29      阅读:118      评论:0      收藏:0      [点我收藏+]

复习,图论经典,noip必备。

1.floyed

求任意两点之间最短路,dp的思想,O(n^3)。

 

技术分享图片
void Floyed(){
    memset(d,0x3f,sizeof(d));
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
View Code

 

2.dijkstra

求单源最短路的优秀算法,本质贪心,所以怕负边权。一般堆优化,比普通的好打,O(nlogn)。

 

技术分享图片
struct node{
    int id,val;
    friend bool operator < (const node &a,const node &b){
        return a.val>b.val;
    }
}now;
struct Edge{
    int ed,nex,w;
}edge[];
void dijs(int st){
    priority_queue<node>q;
    memset(dis,0x7f,sizeof(dis));
    memset(v,0,sizeof(v));
    dis[st]=0;
    now.id=st;now.val=0;
    q.push(now);
    while(!q.empty()){
        now=q.top();q.pop();
        int x=now.id;
        if(v[x]) continue;
        v[x]=1;
        for(int i=first[x];i;i=edge[i].nex){
            int y=edge[i].ed;
            if(dis[y]>dis[x]+edge[i].w){
                dis[y]=dis[x]+edge[i].w;
                now.id=y;now=dis[y];
                q.push(now);
            }
        }
    }return ;
}
View Code

 

3.spfa

求单源最短路的玄学算法,可以碾压dijkstra,也可以被素质出题人卡到自闭,不怕负边权,看起来和堆优的dijkstra神似,但是少一些内容,好打一些,也好理解,O(k*n)。k看入队次数,稀疏图约等于5,碰到稠密图很可能退化,特殊构造必死。

 

技术分享图片
struct EDGE{
    int ed,nex,w;
}edge[];
void spfa(int st){
    queue<int>q;
    memset(dis,0x7f,sizeof(dis));
    memset(v,0,sizeof(v));
    q.push(st);
    dis[st]=0;
    v[st]=1;
    while(!q.empty()){
        int x=q.front();
        for(int i=first[x];i;i=edge[i].nex){
            int y=edge[i].ed;
            if(dis[y]>dis[x]+edge[i].w){
                dis[y]=dis[x]+edge[i].w;
                if(!v[y]){
                    v[y]=1;
                    q.push(y);
                }
            }
        }
        v[x]=0;
        q.pop();
    }return;
}
View Code

 

学最短路时还是个…现在看起来还好。

 

最短路

原文:https://www.cnblogs.com/Yu-shi/p/11142337.html

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