网易笔试题-求有向连通图的割点

首先,明白割点定义:如果去除此点,则有向图不再连通。割点的具体情况可以结合下面的图来分析:


可以看到,割点有两种情况(通过深度优先搜索树来遍历):

1.如果是根节点,且有大于或等于两个以上的子树,则为割点。

2.如果不是叶节点的某节点node(比如节点J,K是叶子节点,但他们不属于割点),对于node来说它的子结点及后继结点没有指向node的祖先的回边,则为割点。譬如图中的E结点,它不满足这个条件所以为割点。

在具体实现的时候用visit[]数组来存储结点的访问顺序,而用low[]数组来存储结点能访问到的最小的结点顺序号。假设对于结点node来说,如果它的后继结点的low[]不小于visit[node]的话,则为割点。程序如下所示:

#include <iostream>
#include <string>
using namespace std;

#define  MAX_NUM 20
int visit[MAX_NUM] = {0};//存储结点的访问顺序
int cuts[MAX_NUM]  = {0};//存储
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值