C++解决强联通问题

C++解决强联通问题,第1张

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;
}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5718972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存