图论
文章平均质量分 92
s4ul
这个作者很懒,什么都没留下…
展开
-
拓扑排序模板
#include<iostream>#include<vector>#include<string.h>#include<queue>using namespace std;int n,m;int deg[100];//度 vector<int> G[100];void TPsort(){ queue<int> q; for(int i=1;i<=n;i++) if(!deg[i]) q.push(i);原创 2020-10-24 21:34:00 · 94 阅读 · 0 评论 -
Team them up! UVA - 1627(动态规划+好题)
题目题目大意:给你n个数字,让你将数字分成两组。是的两组的数字个数尽可能相近。规则如下:每个数字有各自认识的其他数字,每个数字只能和他认识的数字在一组。求分配方式。题目分析:从正面并不是很好下手,不过可以换过一个角度去思考。我们可以考虑如果1,2不认识的话,那么1,2,肯定在不同的组。我们可以把这种关系记录下来。如(1,2),(1,3)(3,4)不能在一组的话,那么只好2,3在一组,1,4在一组。我们可以把不能在一组的两个数字连上边,然后所以不能在一起的关系就会构成一个图。图中所有边都代表边上的两个原创 2020-10-22 16:36:48 · 120 阅读 · 0 评论 -
求有向图的强连通分量-----tarjan算法
定义:有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly connected components)。如何求:伪代码...原创 2020-10-21 20:06:56 · 342 阅读 · 0 评论 -
求无向图的连通分量
方法一【邻接矩阵DFS】邻接矩阵,DFS解#include<iostream>#include<cstdio>using namespace std;bool f[105][105],a[105]; //f邻接矩阵,a给走过的顶点做标记int m,n,ans;void ooo(int s){ a[s]=1; //标记 for(int i=1;i<=n;i++) { if(!a[i]&&f[s][i]) //当两点连通并且此点没有被访问原创 2020-10-21 19:59:21 · 6710 阅读 · 2 评论 -
并查集及种类并查集
B站并查集int find_root(int x){ if(parent[x]==-1)return x; while(parent[x]!=-1) { x=parent[x]; } return x;}int hebing(int x,int y){ int a=find_root(x); int b=find_root(y); if(a==b)return 1; else {if(deep[a]&原创 2020-10-20 12:38:18 · 184 阅读 · 0 评论 -
差分约束系统----最短路径算法的应用
差分约束系统是一种特殊的N元一次不等式组,它包含N个变量X1~Xn以及M个约束条件,每个约束条件都是由两个变量做差构成,形如Xi-Xj<=Ck,其中Ck是常数(可以是负数也可以是非负数),1<=i,j<=N,1<=k<=M.我们要解决的问题是求一组解,X1=a1,X2=a2,X3=a3,…,XN=aN,使得所有条件都得以满足。差分约束系统的每一个约束条件Xi-Xj<=Ck可以变形为Xi<=Xj+Ck。这与单源最短路问题中的三角不等式dist[y]<=dis[原创 2020-10-18 22:39:17 · 260 阅读 · 0 评论 -
SPFA算法的广度优先实现
广度优先搜索+queue实现的spfa算法#include<bits/stdc++.h>using namespace std;#define mod 1e9+7#define N 100#define inf 0x3f3f3f3fconst double PI = atan(1.0)*4.0;typedef long long ll;int visit[N],dis[N],head[N];int m,n;int x,y,z;struct edge{ int u,原创 2020-10-18 20:36:28 · 95 阅读 · 0 评论 -
迪杰斯特拉算法数组模拟邻接表实现
5 9 ------------------------5是节点数,9是边数1 2 11 3 31 4 51 5 82 3 12 5 53 4 13 5 24 5 41 ------------------------- 根节点1 2 3 4 5 --------------- 输出该点到根节点的最短路径结果0 1 2 3 4#include<bits/stdc++.h>using names原创 2020-10-18 12:15:37 · 203 阅读 · 0 评论 -
最小生成树
MST(Minimum Spanning Tree,最小生成树)问题有两种通用的解法,Prim算法就是其中之一,它是从点的方面考虑构建一颗MST,大致思想是:设图G顶点集合为U,首先任意选择图G中的一点作为起始点a,将该点加入集合V,再从集合U-V中找到另一点b使得点b到V中任意一点的权值最小,此时将b点也加入集合V;以此类推,现在的集合V={a,b},再从集合U-V中找到另一点c使得点c到V中任意一点的权值最小,此时将c点加入集合V,直至所有顶点全部被加入V,此时就构建出了一颗MST。因为有N个顶点,所以原创 2020-10-17 00:30:33 · 132 阅读 · 0 评论 -
8.4 算法学习---图论
图的储存结构1.二维数组邻接矩阵存储结构定义int G[N][N]G[i][j]的值,表示从i到j的边的权值注意:初始化数组大可不必使用两重循环1.int数组memset(G,0x7f,sizeof(G))初始化为一个很大的数,memset(G,0,sizeof(G))初始化为0。2.double数组memset(G,127,sizeof(G))初始化为一个很大的数,memset(G,0,sizeof(G))初始化为0。2.二维数组模拟邻接表储存结构#include<iostream&原创 2020-08-04 21:03:43 · 273 阅读 · 0 评论