合并图中顶点的线性链(c++)
Merging linear chain of vertices in a Graph (in C++)
我有一个很大的图,它用邻接表表示。我想通过合并线性节点链来压缩图。例如,如果边是a-c, b-c, c-d, d-e, e-f, e-g
:
a - c - d - e - f
| |
b g
则可以将c-d, d-e
合并为单个节点x
,新的边表中应该有a-x, b-x, x-g
。我想在c++中实现它,但我想知道是否有任何c++图形库处理这个。此外,任何有效的算法的建议是赞赏的。
我想你的例子可能坏了,所以我要解决一个稍微不同的:
a - c - i - d - e - f
| |
b g
|
h
我认为解决方案是这样的:
a - c - x - e - f
| |
b h
如果你同意,那么考虑计算每个顶点在邻接表中出现的次数,并为每个顶点存储前两个邻居:
a b c d e f g h i
1 1 3 2 3 1 2 1 2
c c a i d e e g c
b e g h d
在它为2的地方,我们可以考虑坍缩:在d
, g
和i
:
d g i # candidates
2 2 2
i e c
e h d
现在您可以看到g
有两个邻居不在候选中,所以只需删除g
,因为它是一个单例"链"。剩下d
,它的邻居i
在候选顶点中,所以将d
和i
折叠成一个新的顶点x
,你就完成了。
您只需要删除所有度为2的节点,将它们的两个相邻节点合并为一个节点。
重复此过程,直到没有这样的节点留下。
Boost Graph库通常是存储和处理图形的好方法。查看这里如何合并顶点和收缩边缘相关文章:
- 向量上的线性搜索
- 二叉搜索如何比线性搜索更快?
- 线性丢番图方程 - 求给定区间内的解数和解
- 查找自动生成键并具有线性内存消耗的小型关联数组
- 为什么字符串比较的 == 运算符相对于任一字符串长度线性时间(似乎)?
- 线性优化目标函数中的绝对值
- 犰狳C++:带有模量计算的线性组合
- C++(线性搜索和排序)
- 一般采用可索引/可调用的线性组合
- C++线性搜索算法,确定数组中元素的数量
- 如何在 c++ 中线性搜索两个数组?
- 生成线性随机整数C++
- 使用本征求解线性方程组
- 在 SEAL 中重新线性化一个密文
- 如何在C++中实现线性探测?
- C++ 本征线性系统求解,数值问题?
- 曼哈顿距离比曼哈顿距离+线性冲突效果更好
- 变量未在此范围内声明 数组线性搜索
- 如何线性插值到不恒定的目的地
- 两个嵌套循环的运行时间复杂性:二次型还是线性