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