栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++解决强联通问题

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++解决强联通问题

C++解决强联通问题

简单写一个Tarjan算法。

#include 
#include 
using  namespace std;

int node;
int edge;
int graph[100][100];
int visited[100];
int pre[100];
int path[100][100];

void init()
{
    for(int i = 0;i < node;i++){
        pre[i] = i;
    }
}

void update_pre(int n)
{
    for(int i = 0;i < node;i++){
        if(graph[n][i] == 1 && path[n][i] == 0){
            pre[n] = min(pre[n], pre[i]);
        }
    }
}

void remove(int n)
{
    for(int i = 0;i < node;i++){
        path[n][i] = path[i][n] = 0;
    }
}

void dfs(int n)
{
    visited[n] = 1;
    for(int i = 0;i < node;i++){
        if(visited[i] == 0 && graph[n][i] == 1){
            path[n][i] = path[i][n] = 1;
            dfs(i);
        }
    }
    update_pre(n);
    remove(n);
}

void print()
{
    for(int i = 0;i < node;i++){
        cout << pre[i] << " ";
    }
}

int main()
{
    cin >> node >> edge;
    for(int i = 1;i <= edge; i++){
        int n1, n2;
        cin >> n1 >> n2;
        graph[n1][n2] = 1;
        graph[n2][n1] = 1;
    }

    init();
    dfs(0);
    print();

    system("pause");
    return 0;
}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/723416.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号