[tarjan缩点 + 割点 / 割边 + 重边] 无向图求割点

本文深入探讨无向图的割点和割边概念,结合Tarjan算法进行求解。通过实例解析算法流程,阐述如何识别图中关键节点和边,为图论学习者提供实战参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <cstdio>
#include <cmath>
#include <stack>
#include <cstring>
#define ll long long
#define db double
using namespace std;

const int mn = 103;

int f[mn], ge[mn];

int ecnt, to[mn * mn], nx[mn * mn], fr[mn];
void addedge(int u, int v)
{
	++ecnt;
	to[ecnt] = v;
	nx[ecnt] = fr[u];
	fr[u] = ecnt;
}


/// Tarjan 模板
int idx, low[mn], dfn[mn];
bool insta[mn];
stack<int> sta;
void tarjan(int u, int fa)
{
	int son = 0;	/// 求割点
	
	low[u] = dfn[u] = ++idx;
	sta.push(u);
	insta[u] = 1;
    bool fir = 1;    /// 带重边处理
	for (int i = fr[u]; i != -1; i = nx[i])
	{
		int v = to[i];
		if (v == fa && fir)	/// 无向图
		{
            fir = 0;
            continue;
        }
		if (!dfn[v])
		{
			/// 求割点
			son++;
			f[v] = u;
			///
			
			tarjan(v, u);
			
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值