choose表示选择的算法~

题目戳我~

  1 #include <cstdio>2 #include <cstring>3 4 #define INF 21474836475 #define N 10000016 7 long long n,m,f,nxt[N],fst[N],v[N],e[N],cnt = 0,dis[N],queue[N];8 9 int t,w;bool inqueue[N] = {0};  //Dijkstra10 11 bool book[1000001] = {0};        //spfa12 13 void Add(int a,int b,int c){14     cnt++;15     if(a == f)dis[b] = c;16     e[cnt] = b;17     nxt[cnt] = fst[a];18     fst[a] = cnt;19     v[cnt] = c;20 }21 int main()22 {23     memset(fst,-1,sizeof(fst));24     memset(nxt,-1,sizeof(nxt));25     scanf("%lld %lld %lld",&n,&m,&f);26     for(int i = 0;i <= n + 10;i++)27         dis[i] = INF;28     for(int i = 1;i <= m;i++){29         long long a,b,c;30         scanf("%lld %lld %lld",&a,&b,&c);31         Add(a,b,c);32     }33     34     int choose = 2;35     36     if(choose == 1){37         //Dijkstra38         dis[f] = 0;39         book[f] = 0;40         for(int i = 1;i <= n;i++){41             int Mn = INF,x;42             for(int j = 1;j <= n;j++)43                 if(dis[j] < Mn && !book[j])44                     Mn = dis[j],x = j;45             book[x] = 1;46             for(int k = fst[x];k != -1;k = nxt[k])47                 if(v[k] + dis[x] < dis[e[k]])48                     dis[e[k]] = v[k] + dis[x]; 49         }50     }51     if(choose == 2){52         //spfa53         memset(inqueue,0,sizeof(inqueue));54         t = w = 1;55         queue[1] = f;56         inqueue[f] = 1;57         dis[f] = 0;58         while(t <= w){ 59             inqueue[queue[t]] = 0;60             for(int j = fst[queue[t]];j != -1;j = nxt[j]){61                 if(dis[queue[t]] + v[j] <= dis[e[j]]/*一定为"<="*/){62                     dis[e[j]] = dis[queue[t]] + v[j];63                     if(!inqueue[e[j]]){64                         w++;65                         queue[w] = e[j];66                         inqueue[e[j]] = 1;67                     }68                 }            69             }70             t++;71         }72     }73     74     for(int i = 1;i <= n;i++){75         //printf("%lld %c %lld : %lld\n",f,26,i,dis[i]);76         printf("%d ",dis[i]);77     }78         79     return 0;80 }81 /*82 ---data---83 84 4 5 185 1 4 986 2 4 687 1 2 588 4 3 889 1 3 790 ans:91 0 5 7 992 93 4 6 194 1 2 295 2 3 296 2 4 197 1 3 598 3 4 399 1 4 4
100 ans:
101 0 2 4 3
102
103 6 9 1
104 1 2 1
105 1 3 12
106 2 3 9
107 2 4 3
108 3 5 5
109 4 3 4
110 4 5 13
111 4 6 15
112 5 6 4
113 ans:
114 0 1 8 4 13 17
115 */

转载于:https://www.cnblogs.com/frankying/p/6581967.html

单源最短路(spfa+Dijkstra)附数据相关推荐

  1. uva 10099 The Tourist Guide(单源最短路/spfa/dijkstra)

    题目: 链接:点击打开链接 题意: 思路: 代码: #include <iostream> #include <cstring> #include <cstdio> ...

  2. 单源最短路之Dijkstra算法代码模板

    常用算法代码模板总结 目录 注意事项 数组定义 实现步骤 练习例题:Dijkstra求最短路 注意事项 用来求单源最短路 所有边权都是正数,时间复杂度O(n^2) 可通过堆优化达到时间复杂度为O(ml ...

  3. 【单源最短路】Dijkstra算法求最短路

    题目描述 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环,所有边权均为正值. 请你求出 1 号点到 n 号点的最短距离,如果无法从 1 号点走到 n 号点,则输出 −1. 输入格式 第一 ...

  4. 单源最短路 SPFA 算法模板

    简介 在图论中,最短路是十分重要的一部分,在很多问题中都有涉及 而现在所讲的 SPFA 算法是十分优秀的算法,时间复杂度为 O(k∗E)O(k*E) 其中 EE 是图的边数,而 kk 是一个常数,一般 ...

  5. 单源最短路径(spfa,Dijkstra, bellman-ford)

    目录 Dijkstra 原理:基于贪心. 为什么 Dijkstra 不能处理有负边的情况 Bellman-ford 原理:动态规划, 实质见floyd的另一篇博客 1,能找负环, 2,有变数限制的最短 ...

  6. HDU 2066 一个人的旅行(单源最短路SPFA)

    Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还 ...

  7. 单源最短路 Dijkstra算法 和 SPFA算法

    单源最短路 •从一个点出发,到达其他顶点的最短路径的长度. •基本操作:松弛 •d[u]+map[u, v]< d[v]这样的边(u,v)称为紧的(tense),可以对它进行松弛(relax): ...

  8. dijkstra邻接表_[力扣743] 带权邻接表的单源最短路

    题目链接 743. 网络延迟时间 题目描述 有 N 个网络节点,标记为 1 到 N. 给定一个列表 times,表示信号经过有向边的传递时间. times[i] = (u, v, w),其中 u 是源 ...

  9. CSP认证201609-4 交通规划[C++题解]:最短路径树、dijkstra求单源最短路、递推思想

    题目分析 来源:acwing 分析: 这题是最短路树.保持原图中所有点到根结点的最短距离不变,然后在原图中选择一些边,使所有点连通的最短路是多长. 最短路径树,是一种使用最短路径算法生成的数据结构树. ...

  10. 【HDU - 2112】 HDU Today(dijkstra单源最短路 + map转换)

    题干: HDU Today Time Limit : 15000/5000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Tota ...

最新文章

  1. RTSP流媒体数据传输的两种方式(TCP和UDP)
  2. Python教程:json中encode与decode区别
  3. 2021牛客多校5 - Double Strings(dp+组合数学)
  4. CF755G PolandBall and Many Other Balls(多项式/倍增fft)
  5. 洛谷P6097:【模板】子集卷积(FWT)
  6. 网际控制报文协议icmp_网络中的ICMP(Internet控制消息协议)
  7. 32位存储环境下整数范围为什么是[-2^31,2^31-1]?
  8. 局域网聊天的本质是函数
  9. 安徽中职计算机专业对口高考,安徽对口高考和普通高考有什么区别?
  10. winform Combobox出现System.Data.DataRowView的解决的方法
  11. 注意!恶意NPM包正在安装勒索软件和密码窃取木马
  12. idea装vue插件之后没有代码提示怎么办呢
  13. 17ー03ー20 日本語勉強
  14. SAP FI月结 坏账转移及计提准备 Doubtful Receivables Bad Debts
  15. 小技巧(8)pimple模式
  16. CAD能打开PDF格式吗?这样做可以快速实现
  17. Java调用Python下载网页
  18. 九章量子计算机应用,“九章”量子计算机这么牛,到底有什么用? |【经纬低调分享】...
  19. 在win10上搭建完整Kubernetes、Istio、Prometheus、Grafana和Knative
  20. 学习JS,实现自动打字机动效

热门文章

  1. TypeError: tuple indices must be integers, not tuple是怎么回事
  2. 订个票,显示吾是何等的脑残
  3. 空间可能与时间一样,也是不可逆转的
  4. 管理感悟:出了事故,关键是想想自己哪里能改进
  5. 析构语意学(Semantics of Destruction)
  6. 未定义数组索引:_数据结构-数组
  7. C# 图片exif信息
  8. java map size 不准确_java1.7以前ConcurrentHashMap的size方法
  9. mysql连接 xorm_使用go xorm来操作mysql的方法实例
  10. 逻辑回归python sigmoid(z)_python 实现逻辑回归