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 一种搜索算法,可以在不同的数据结构上进行搜索,在二叉树章节里是在二叉树这样的数据结构上搜索。

而在图论章节,则是在图(邻接表或邻接矩阵)上进行搜索。

 

posted @ 2024-09-25 19:59  axuu  阅读(13)  评论(0编辑  收藏  举报