摘要: Kruskal算法(适用于稀疏图) 1、将所有边按权重从小到大排序 O(mlogn) 2、枚举每条边a,b,权重c O(m) if a,b不连通 将这条边加入集合中 判断连通 使用并查集来判断两个连通块是否连通 #include<iostream> #include<algorithm> using 阅读全文
posted @ 2020-07-04 17:35 chstor 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 朴素版prim算法(适用于稠密图) 时间复杂度:O(n^2) 类比Dijkstra算法:Dijkstra算法是更新到起始点的距离,Prim是更新到集合S的距离 S:当前已经在联通块中的所有点的集合 dist[i] = inf for n 次 t<-S外离S最近的点 st[t] = true 利用t更 阅读全文
posted @ 2020-07-04 17:24 chstor 阅读(140) 评论(0) 推荐(0) 编辑
摘要: Floyd算法 时间复杂度是O(n^3) 初始化 初始化: for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) if (i == j) mp[i][j] = 0; else mp[i][j] = INF; 核心算法 注意:k,i 阅读全文
posted @ 2020-07-04 12:06 chstor 阅读(124) 评论(0) 推荐(0) 编辑
摘要: SPFA判断图中是否存在负环 时间复杂度是一般O(m),最坏:(nm) 转载自小呆呆大佬 算法分析:使用spfa解决是否存在负环问题 1、dist 记录当前1到x的最短距离 2、cnt 记录当前最短路的边数,初始每个点到1号点的距离为0,只要它能走n步,即cnt >= n,则表示该图中一定存在负环, 阅读全文
posted @ 2020-07-04 12:03 chstor 阅读(254) 评论(0) 推荐(1) 编辑
摘要: Bellman_ford算法可以存在负权回路,是因为其循环的次数是有限制的因此最终不会发生死循环; 但是SPFA算法不可以,由于用了队列来存储,只要发生了更新就会不断的入队,因此假如有负权回路请你不要用SPFA否则会死循环。 Bellman-Ford算法 时间复杂度O(nm),n表示点数,m表示边数 阅读全文
posted @ 2020-07-04 11:50 chstor 阅读(146) 评论(0) 推荐(0) 编辑
摘要: 朴素Dijkstra算法 时间复杂是 O(n^2+m), n 表示点数,m 表示边数 适合稠密图 #include<cstring> #include<iostream> #include<algorithm> #define mm(a,x) memset(a,x,sizeof(a)) #defin 阅读全文
posted @ 2020-07-04 11:26 chstor 阅读(859) 评论(0) 推荐(0) 编辑