网上几乎没有求割边的代码…所以我写了个。
写的比较简洁,用的前向星,求割边,输出的地方表示一条割边。
const int N=110;
struct data
{
int to,next;
} tu[N*N];
int head[N],low[N],dfn[N];
int ip;
int step;
void init()
{
ip=0;
step=1;///遍历的步数
memset(head,-1,sizeof(head));
memset(dfn, 0, sizeof(dfn));
}
void add(int u,int v)
{
tu[ip].to=v,tu[ip].next=head[u],head[u]=ip++;
}
void tarjan(int u,int pre)
{
dfn[u] = low[u] = step++;
for(int i = head[u]; i!=-1 ; i=tu[i].next)
{
int to = tu[i].to;
if(!dfn[to])
{
tarjan(to,u);
low[u]=min(low[u],low[to]);
if(low[to]>dfn[u])
printf("%d--%d\n",u,to);///表示u到to是一条割边
}
else if(to!=pre)
low[u]=min(low[u],dfn[to]);
}
}

本文提供了一种简洁的求割边算法实现方案,使用前向星结构存储图,并通过Tarjan算法进行割边的查找。代码中包含了初始化图、添加边、执行Tarjan算法等关键步骤。
&spm=1001.2101.3001.5002&articleId=51606358&d=1&t=3&u=18d0edc9a4764692af870fae5cb055a9)
1977

被折叠的 条评论
为什么被折叠?



