static void nodeInduce(Agraph_t * g) { Agnode_t *n, *rootn; Agedge_t *e; for (n = agfstnode(g); n; n = agnxtnode(n)) { rootn = agsubnode(agroot(g), n, FALSE); for (e = agfstout(rootn); e; e = agnxtout(e)) { if (agsubnode(g, aghead(e), FALSE)) agsubedge(g, e, TRUE); else { if (getscc(aghead(e)) && getscc(agtail(e))) agedge(getrep(getscc(agtail(e))), getrep(getscc(aghead(e))), NIL(char *), TRUE); } } } }
static void nodeInduce(Agraph_t * g, Agraph_t* map) { Agnode_t *n; Agedge_t *e; Agraph_t* rootg = agroot (g); for (n = agfstnode(g); n; n = agnxtnode(g, n)) { for (e = agfstout(rootg, n); e; e = agnxtout(rootg, e)) { if (agsubnode(g, aghead(e), FALSE)) agsubedge(g, e, TRUE); else { Agraph_t* tscc = getscc(agtail(e)); Agraph_t* hscc = getscc(aghead(e)); if (tscc && hscc) agedge(map, getrep(tscc), getrep(hscc), NIL(char *), TRUE); } } } }
vec1<vec1<vec1<int> > > blocks(const vec1<int>& v) { return getscc(v).getBlockList(); }
vec1<OrbitalGraph> orbitals(const vec1<int>& v, int domain_size) { return getscc(v).getOrbitalList(domain_size); }
vec1<vec1<int> > orbits(const vec1<int>& v, int domain_size) { return getscc(v).getOrbitsPartition(domain_size); }