示例#1
0
void cacl_sccs(struct Node** vertice, struct Node** reverse){
    int* order = malloc(sizeof(int) * MAX_VERTEX) ;
    //printf("size=sss\n");
    memset(order, 0, sizeof(int)*MAX_VERTEX);
    dfs_reverse(reverse, order);
    dfs_vertice(vertice, order);
}
示例#2
0
void dfs_reverse(int v, int comp = 1) {
    color[v] = comp;

    for (int i = 0; i < redges[v].size(); i++) {
        int next = redges[v][i];

        if (!color[next]) {
            color[next] = comp;
            dfs_reverse(next, comp);
        }
    }
}
示例#3
0
int find_scc(int n) {
    int colorcnt = 0;

    find_topsort(n);

    for (int i = 0; i < n; i++) {
        if (!color[topsort[i]]) {
            color_repr.push_back(topsort[i]);
            colorcnt++;
            dfs_reverse(topsort[i], colorcnt);
        }
    }

    return colorcnt;
}