![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
搜索与图论
_ymi
/(ㄒoㄒ)/~~
展开
-
Kruskal算法
P1195 口袋的天空n个点,m条边,连成k个集合,也就是连(n-k)条边,并且使得连接的边权值最小1.判断能不能成功 m>n-k2.连n-k条边使得边权值之和最小,所以Kruskal算法有边的排序//口袋的天空//分析一下,就是k棵树要连n-k条边,怎么使边之和最小呢 //Kruskal算法有排序#include<iostream>#include<cstring>#include<algorithm>using namespace std原创 2021-03-12 22:23:27 · 72 阅读 · 0 评论 -
存在负权边
1.bfd算法—O(nm) 第一重是点,迭代k次的话是指,从1 开始最多不经过超过k条边注意的是要有备份,backup数组,更新的时候用备份的数组更新#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N=510,M=10010;const int INF=0x3f3f3f3f;int n,m,k;int dist[N];int b原创 2021-03-12 10:58:58 · 295 阅读 · 0 评论 -
Dijkstra算法及优化
单源最短路径–都是正权边时1.一种特殊情况,当边权是1 的时候,可以直接bfs,用book[N]来继承路径长度(拓扑排序的时候book[N] 存的是入度2.朴素Dijkstra算法,,适用于稠密图,n^2<m时,注意这时邻接矩阵不能越界,当然可以用邻接表存#include<iostream>#include<cstring>using namespace std;const int N=1e5+10;const int INF=0x3f3f3f3f;int原创 2021-03-11 21:50:58 · 356 阅读 · 0 评论 -
数组存邻接表
模板://数组表示邻接表int top=0;//向--点中存第top个边 int head[MAX_N]=-1;//每个点在建立邻接表时,栈顶的边的编号 //边的结构体 struct Edge{ int v;//另一端连接的点 int next;//栈中 下面 一条边的编号 }e[MAX_E];void add(int u,int v){ e[top].v=v; e[top].next=head[u]; head[u]=top++;//top为要加入边的编号,更新后为下一次原创 2021-03-07 20:48:09 · 207 阅读 · 0 评论