Tarjan_com.pakdata.QuranMajeed

Tarjan_com.pakdata.QuranMajeedTarjanTarjan是一种求有向图强联通分量的算法,是用dfs实现以及时间戳标记访问最短时间的.Tarjan算法中每个点都需要扩展边,为了存储方便,推荐使用邻接表.Tarjan算法的优势在于其灵活性,基础代码可以直接适用于多数情况.常见于dfs序.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

Tarjan

0.2

目录


基本概念

    Tarjan是一种求有向图强联通分量的算法, 是用dfs实现以及时间戳标记访问最短时间的.Tarjan算法中每个点都需要扩展边,为了存储方便,推荐使用邻接表.Tarjan算法的优势在于其灵活性,基础代码可以直接适用于多数情况.常见于dfs序.

Jetbrains全家桶1年46,售后保障稳定

运行Tarjan算法的过程中,每个顶点都被访问了一次,且只进结合.出了一次堆栈,每条边也只被访问了一次,所以该算法的时间复杂度为O(N+M)。


基础代码

#include <cstdio>
#include <stack>
#include <iostream>
using namespace std;
int f[11],ro,dfn[11],low[11],g[11],c;
bool v[11];
stack<int> q;
struct $
{
    int s,t,ne;
}a[11];
void Tarjan(int co)
{
    /*dfn层数 low最早到达时间*/
    dfn[co]=low[co]=++c;//标记当前时间戳
    q.push(co);//将点压入栈
    for(int k=f[co];k;k=a[k].ne)
    {
        int i=a[k].t;
        if(v[i]) continue;//如果已经访问过,就跳过
        //dfs
        if(!dfn[i])//这个表示该点是否已经被打上时间戳
        {
            Tarjan(i);
            low[co]=min(low[co],low[i]);
            //如果否,打上最小时间戳.
        }
        else
            low[co]=min(low[co],dfn[i]);
    }
    if(dfn[co]==low[co])//找到根
    {
        sum++;//记录分量数量
        int i;
        while(i!=co)
        {
            i=q.top();
            v[i]=true;//标记找到
            g[i]=co;//记录每个点的根,在缩图时用
            q.pop();
        }
        v[co]=1;
        if(!q.empty())q.pop();//有些特殊情况不判断可能会崩溃
    }
}
int main()
{
    int n;cin>>n;
    for(int i=1;i<=n;i++)//链式前向星
        while(1)
        {
            scanf("%d",&v);
            if(!v) break;
            a[++ro].s=i;
            a[ro].t=v;
            a[ro].ne=f[i];
            f[i]=v;
        }
    for(int i=1;i<=n;i++)//扩展
        if(!dfn[i])
        {
            c=0;
            Tarjan(i);
        }
    return 0;
}

常见变换

(main())
if(c==1)//c标记强联通分量数量
    printf("该图强联通\n");

void rebuild()//缩图去环
{
    for(int i=1;i<=ro/*路的数量*/;i++)
        if(g[a[i].s]!=g[a[i].t])//如果路的两端分别在两个强联通分量中
            合并;

}
void degree()//入度出度计算,紧接rebuild()
{
    int ina=0,outa=0,vi[11]={
  
  0},vo[11]={
  
  0};//标记点是否有出入度,可根据需要改为计数
    for(int i=1;i<=ro)
        if(g[a[i].s]!=g[a[i].t])
        {
            //在这里改为++即可
            vi[a[i].t]=1;
            vo[a[i].s]=1;
        }
    for(int i=1;i<=n;i++)
    {
        if(!vi[i]) ina++;
        if(!vo[i]) outa++;
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215456.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA基础知识之BufferedWriter流

    JAVA基础知识之BufferedWriter流一、BufferedWriter流    API文档说明:  1)将文本写入字符输出流,缓冲字符,以便有效地写入单个字符,数组和字符串?   说明存在用单个字符、数组、字符串作为参数的方法写入数据    2)可以指定缓冲区大小,或者可以接受默认大小。对于大多数用途,默认值足够大?   说明该类存在一个常量值用作默认缓冲区大小同时也可以通过构造函数指定大小    3)…

    2022年6月10日
    43
  • Python翻译Excel文件

    Python翻译Excel文件朋友需要翻译大量 Excel 文件内容 看我是否能搭把手 我的思路很简单 就是将 Excel 文件内容读出后 调用翻译软件的 API 然后再爬回翻译好的内容 写入 Excel 读取 Excel 文件内容的方法 我这里要处理的是 xlsx 文件 可以 importopenpy 如果要处理 xls 文件 就不能用这个 而是 importxlrd 或者先将 xks 文件转为 xlsx 文件再使用本文代码 具体这两个包提

    2025年10月4日
    2
  • char型和int型数据可以相互转换_c语言强制类型转换用法

    char型和int型数据可以相互转换_c语言强制类型转换用法char转intchar与int的相互转化,联想ASCII码,字符‘0’对应的值为48,所以不能直接加减‘’charch=’9′;intch_int=ch-‘0′;//此时ch_int=9int转charinti=9;chari_ch=i+’0’;//此时i_ch=’9’必须记住的几个ASCII值字符值ASCII值‘0’48…

    2022年10月2日
    4
  • Linux-xsync分发脚本

    Linux-xsync分发脚本xsync集群分发脚本(1)需求:循环复制文件到所有节点的相同目录下(2)需求分析:(a)rsync命令原始拷贝:rsync-av/opt/moduleatguigu@hadoop103:/opt/(b)期望脚本:xsync要同步的文件名称(c)期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)[atguigu@hadoop102~]$echo$PATH/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/ho

    2022年5月15日
    30
  • Lamp架构_公司网络架构与配置

    Lamp架构_公司网络架构与配置1.LAMP简介与概述1.1LAMP平台概述LAMP架构是目前成熟的企业网站应用模式之一,指的是协同工作的一整台系统和相关软件,能够提供动态web站点服务及其应用开发环境LAMP是一个缩写词,具体包括Linux操作系统,Apache网站服务器,MySQL数据库服务器,PHP(或perl,Python)网页编程语言1.2LAMP各组件作用(平台)Linux:作为LAMP架构的基础,提供用于支撑Web站点的操作系统,能够与其他三个组件提供更好的稳定性,兼容性(AMP组件也支持Wind..

    2022年10月17日
    5
  • SQLSERVER存储过程语法的具体解释

    SQLSERVER存储过程语法的具体解释

    2022年1月11日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号