【图论】最短路(一)

发现之前做的题很乱,用小笔记把看过的博客和题目分类记录一下,

代码参考了很多佬,是标注出来的链接,若不同意我就删掉(鞠躬)

找了几张好点的,图来源图中的id和acwing

1.dijkstra 依次找到距离集合最近的点加入集合

1.1朴素dijkstra

估计也用的少,见3.1 模板最短路x2

1.2堆优化版dijkstra

当点/边数目达10^5时,用了才能在1s内

复制代码
void dijkstra(){
priority_queue<pair<long long,long long>,vector<pair<long long,long long>>,greater<pair<long long,long long>>> heap;
heap.push({0,s});
dist[s]=0;


while(!heap.empty()){

    pair<long long ,long long>temp=heap.top();
    heap.pop();
    long long x=temp.first;long long y=temp.second;
    if(st[y])continue;
    st[y]=true;

    for(long long i=head[y];i!=-1;i=edge[i].next){//边的编号i
        long long t=edge[i].to;
        if(dist[t]>x+edge[i].w){
            dist[t]=x+edge[i].w;
            heap.push({dist[t],t});
        }
    }

}



}

2.bellman-ford 经过n-1轮对每条边进行松弛

最短路问题 Bellman-Ford(单源最短路径)(图解)_bellmanford算法图解-CSDN博客

2.1 bellman-ford

复制代码
void bellman(){
for(int i=2;i<=n;i++)dist[i]=INF;
    dist[1]=0;

    
for(int i=1;i<=n-1;i++){
    bool ok=1;
    for(int j=1;j<=tot;j++){
        int u=edge[j].u;int v=edge[j].v;
        if(dist[u]!=INF&&dist[v]>dist[u]+edge[j].w){//dis[u]!=INF很是重要
    dist[v]=dist[u]+edge[j].w;
    ok=0;

        }

    }


    if(ok==1)break;

}

}

2.2 spfa 队列优化的

注意visu=false;

复制代码
void spfa(int s){
   
for(int i=1;i<=n;i++)dis[i]=INF,vis[i]=false;
queue <int> q;
q.push(s);
dis[s]=0,vis[s]=true;

while(!q.empty()){
int u=q.front();
q.pop();
vis[u]=false;



for(int i=head[u];i!=-1;i=edge[i].next){
int v=edge[i].v;

if(dis[v]>dis[u]+edge[i].w){
dis[v]=dis[u]+edge[i].w;

if(!vis[v]){
    q.push(v);
    vis[v]=true;
    cnt[v]++;
}

}

}




}





}
相关推荐
依然鸣15 小时前
PTA团体程序设计天梯赛L2真题讲解L2-005-008
开发语言·数据结构·c++·算法·深度优先·pat考试·图论
wabs6661 天前
关于图论【最短路径之Bellman_ford 算法(单源有限最短路)|卡码网96.城市间货物运输III的思考】
数据结构·算法·图论·卡码网·bellman_ford·单源有限最短路
wabs6663 天前
关于图论【最短路径之Bellman_ford 算法(判断负权回路)|卡码网95.城市间货物运输II的思考】
数据结构·算法·图论·bellman_ford算法·卡码网·判断负权回路
cpp_25014 天前
P1113 [USACO02FEB] 杂务
数据结构·c++·算法·动态规划·图论·拓扑排序·洛谷题解
漂流瓶jz4 天前
UVA-12174 Shuffle的播放记录 题解答案代码 算法竞赛入门经典第二版
数据结构·c++·算法·图论·滑动窗口·算法竞赛入门经典·uva
wabs6665 天前
关于图论【最短路径之Bellman_ford 算法|卡码网94.城市间货物运输的思考】
数据结构·算法·图论·卡码网·bellman_ford·求最短路径
wabs6665 天前
关于图论【最短路径之Dijkstra算法(堆优化版)|卡码网47.参加科学大会的思考】
数据结构·算法·图论·优先级队列·邻接表·小顶堆·卡码网
wabs6666 天前
关于哈希表【力扣1.两数之和的思考】
数据结构·算法·leetcode·散列表·图论
oier_Asad.Chen6 天前
【洛谷题解/AcWing题解/真题】洛谷P2330【SCOI2005】繁忙的都市(Kruskal算法的再探究))
c++·算法·贪心算法·图论·最小生成树·kruskal
wabs6667 天前
关于图论【卡码网117.软件构建的思考】
数据结构·算法·软件构建·图论·卡码网