图可以用邻接矩阵(顶点和顶点矩阵)和邻接表(顶点的链表)两种形式的结构来存储。 还有逆邻接表,顶点依然是头结点,但后续存的是谁指向你的。还有十字链表。。。 漫画:什么是 “图”?(修订版) 图的遍历:DFS,BFS 搞搞清楚! 漫画:深度优先遍历 和 广度优先遍历 二分图 如果可以用两种颜色对图中的 ...
分类:
其他好文 时间:
2020-06-11 21:25:40
阅读次数:
122
约定 我是怎么存图的呢? 普通的邻接表。 const int N = 1e5+15; // 点数 const int M = 1e6+15; // 边数 int ct,hd[N],nt[M<<1],vr[M<<1],vl[M<<1]; void ad(int a,int b,int c) { // ...
分类:
编程语言 时间:
2020-06-03 21:57:14
阅读次数:
98
本周学习的新内容为图: 在图的课件中学习了用邻接表和邻接矩阵的方式来储存图。 对于邻接矩阵,更像是一个二维数组,通过储存0和1的方式来表示度与度之间是否连通。 邻接矩阵的固有缺点,对于无向图来说,同一条路会储存两遍,浪费空间。且对于足够稀疏的图来说,过多的0会占用许多无用空间。 邻接表:更像是一个一 ...
分类:
其他好文 时间:
2020-06-01 01:02:06
阅读次数:
55
树与图的存储 树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b, b->a。因此我们可以只考虑有向图的存储。 (1) 邻接矩阵:g[a][b] 存储边a->b (2) 邻接表: // 对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点 ...
分类:
其他好文 时间:
2020-05-24 14:06:38
阅读次数:
62
题意 :给你$n$个顶点和$m$条边,问它们有多少个单环(无杂环),例如图中第二个就是一个杂环. 题解 :不难发现,如果某几个点能够构成单环,那么每个点一定只能连两条边.所以我们先构建邻接表,然后从某个数开始跑dfs,如果这一边所有点的度数都为$2$,那么就能构成一个单环. 代码 : ...
分类:
其他好文 时间:
2020-05-20 18:34:55
阅读次数:
42
1 与课程表那个题很类似,建立图的邻接表和度数表,每次遍历度数为1的点,每遍历一个就更新度数表,并判断更新的点度数是否变为1了,如果为1了,则下一轮遍历,最后一轮遍历的即为结果,这个题和拓扑排序课程表类似,关键是对节点的度的理解,对图问题,一定要学会建邻接表和度数表, 310. 最小高度树 ...
分类:
其他好文 时间:
2020-05-18 16:30:49
阅读次数:
62
算法简述 SPFA算法其实是bellman-ford算法的队列优化形式,不再是简简单单的进行n-1次松弛,而是使用队列,能使路径变短(dist[y] > dist[x] + 1)且不在队列里的节点才入队进行松弛。 SPFA算法与Dijkstra算法的堆优化实现形式差不多,都是使用邻接表的方式。 代码 ...
分类:
编程语言 时间:
2020-05-16 21:02:59
阅读次数:
88
最大流 Edmond Karp 原版的是用邻接矩阵写的,太耗内存了,这里改成邻接表。 Dinic 玄学的Dinic ...
分类:
其他好文 时间:
2020-05-16 20:38:32
阅读次数:
54
问题1.判断有没有环 http://hihocoder.com/problemset/problem/1174 用vector模拟邻接表,开一个记录入度的一维数组,一个存储入度为0的队列 ac代码如下 #include<iostream> #include<algorithm> #include<v ...
分类:
编程语言 时间:
2020-05-15 17:39:42
阅读次数:
65
克隆图。题意是给一个图中的某一个node的reference,请你深度克隆整个图。图中的每个节点包含他的值和邻接表。例子, class Node { public int val; public List<Node> neighbors; } Input: adjList = [[2,4],[1,3 ...
分类:
其他好文 时间:
2020-05-03 13:09:50
阅读次数:
56