2024/9/25代码随想录 图论 关于ACM模式下输出的细节
1. 就只输出一行数据,输出 1 2 4 5
来说,
正确的输出代码:
for (int i = 0 ; i < result.size() - 1; i++) { cout << result[i] << " "; } cout << result[result.size() - 1];
常见的错误的输出代码:
for (int i = 0 ; i < result.size(); i++) { cout << result[i] << " "; }
输出的结果是对的,一提交,发现OJ返回 格式错误 或者 结果错误。
其实这段代码输出最后一个数的时候,加上了空格。判断机判断结果的长度比正确的答案的输出长度多1.
2.连通分量
在无向图中的极大连通子图称之为该图的一个连通分量。
3.强连通分量
在有向图中极大强连通子图称之为该图的强连通分量。
4.如何用代码来表示一个图呢?
一般使用邻接表、邻接矩阵 或者用类来表示。
4.1邻接矩阵
邻接矩阵的优点:
- 表达方式简单,易于理解
- 检查任意两个顶点间是否存在边的操作非常快
- 适合稠密图,在边数接近顶点数平方的图中,邻接矩阵是一种空间效率较高的表示方法。
缺点:
- 遇到稀疏图,会导致申请过大的二维数组造成空间浪费 且遍历 边 的时候需要遍历整个n * n矩阵,造成时间浪费。
4.2邻接表
邻接表 使用 数组 + 链表的方式来表示。 邻接表是从边的数量来表示图,有多少边 才会申请对应大小的链表。
邻接表的优点:
- 对于稀疏图的存储,只需要存储边,空间利用率高
- 遍历节点连接情况相对容易
缺点:
- 检查任意两个节点间是否存在边,效率相对低,需要 O(V)时间,V表示某节点连接其他节点的数量。
- 实现相对复杂,不易理解
5.图的遍历方式
图的遍历方式基本是两大类:
- 深度优先搜索(dfs)
- 广度优先搜索(bfs)
dfs 和 bfs 一种搜索算法,可以在不同的数据结构上进行搜索,在二叉树章节里是在二叉树这样的数据结构上搜索。
而在图论章节,则是在图(邻接表或邻接矩阵)上进行搜索。