有没有一种算法,能求出去掉尽可能少的顶点,让无向连通图变为不连通?

2023-04-09 03:33:46 +08:00
 mikewang

边没有方向和权重之分,只需求出一种分割方法即可。


(网上随便找来的图)

举例:
下图中去除顶点 E ,可分割为两个连通图:

下图中去除 1 个顶点,或者 2 个顶点,均不能有效分割;去除 3 个顶点 (1, 4, 7) 可分割为两个连通图:


注:不要 ChatGPT ,谢谢

1992 次点击
所在节点    Python
8 条回复
geelaw
2023-04-09 04:23:09 +08:00
你需要的关键词是 vertex connectivity 。这个问题可以用(数次调用)最大流—最小割算法解。
ryd994
2023-04-09 07:57:54 +08:00
max flow min cut
PendingOni
2023-04-09 08:07:11 +08:00
assiadamo
2023-04-09 12:37:06 +08:00
mikewang
2023-04-09 15:42:40 +08:00
@geelaw @ryd994 @PendingOni @assiadamo
感谢各位的回答,
了解了最小割的算法,但是好像都是将边割开,而不是将点去除;

#4 这个求割点比较接近了,但是不能解决需要割掉两个以上点的情形

参考了一道题,奶牛的电信 ( https://www.luogu.com.cn/problem/P1345 )
虽然思路可以将割点转化为了割边,但是这是有来源和目的地的;
对于一般场景如何应对呢...
geelaw
2023-04-09 15:44:38 +08:00
@mikewang #5 你可以固定一个源,然后枚举汇。
mikewang
2023-04-09 16:05:14 +08:00
@geelaw 哈哈 我脑袋有点傻了 这样确实可解
不过这种情况任选一个源点固定,枚举汇点即可?比如 5 个点,调用 4 次即可
源点不用枚举吗
geelaw
2023-04-09 22:39:54 +08:00
@mikewang #7 固定的源属于某个连通分量,枚举不属于那个连通分量的汇。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/930918

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX