4 if (! Desc.
Empty()) { printf(
"%s:\n", Desc.
CStr()); }
5 for (
int cc = 0; cc < CnComV.
Len(); cc++) {
7 printf(
"%d : ", NIdV.
Len());
8 for (
int i = 0; i < NIdV.
Len(); i++) { printf(
" %d", NIdV[i].Val); }
14 FILE *F = fopen(FNm.
CStr(),
"wt");
15 if (! Desc.
Empty()) { fprintf(F,
"# %s\n", Desc.
CStr()); }
16 fprintf(F,
"# Connected Components:\t%d\n", CnComV.
Len());
17 fprintf(F,
"# Connected components (format: <Size>\\t<NodeId1>\\t<NodeId2>...)\n");
18 for (
int cc = 0; cc < CnComV.
Len(); cc++) {
20 fprintf(F,
"%d", NIdV.
Len());
21 for (
int i = 0; i < NIdV.
Len(); i++) { fprintf(F,
"\t%d", NIdV[i].Val); }
35 for (
int c =0; c < BiCnComV.
Len(); c++) {
36 SzCntH.
AddDat(BiCnComV[c].Len()) += 1;
45 BiCnComV = Visitor.CnComV;
51 Visitor.ArtSet.GetKeyV(ArtNIdV);
59 for (
int c = 0; c < BiCnComV.
Len(); c++) {
60 const TIntV& NIdV = BiCnComV[c].NIdV;
61 if (NIdV.
Len() == 2) {
74 if (EdgeV.
Empty()) { SzCntV.
Clr(
false);
return; }
77 for (
int e = 0; e < EdgeV.
Len(); e++) {
78 TmpG->DelEdge(EdgeV[e].Val1, EdgeV[e].Val2); }
81 const TIntV& MxWcc = CnComV[0].NIdV;
83 for (
int i = 0; i < MxWcc.Len(); i++) {
84 MxCcSet.
AddKey(MxWcc[i]); }
86 for (
int e = 0; e < EdgeV.
Len(); e++) {
87 if (! MxCcSet.IsKey(EdgeV[e].Val1) && ! MxCcSet.IsKey(EdgeV[e].Val2)) {
88 TmpG->AddEdge(EdgeV[e].Val1, EdgeV[e].Val2); }
91 for (
int c = 0; c < SzCntV.
Len(); c++) {
92 if (SzCntV[c].Val1 == MxCcSet.
Len()) {
93 SzCntV.
Del(c);
break; }
102 if (EdgeV.
Empty()) { Cn1ComV.
Clr(
false);
return; }
105 for (
int e = 0; e < EdgeV.
Len(); e++) {
106 TmpG->DelEdge(EdgeV[e].Val1, EdgeV[e].Val2); }
109 const TIntV& MxWcc = CnComV[0].NIdV;
111 for (
int i = 0; i < MxWcc.Len(); i++) {
112 MxCcSet.
AddKey(MxWcc[i]); }
114 for (
int e = 0; e < EdgeV.
Len(); e++) {
115 if (! MxCcSet.IsKey(EdgeV[e].Val1) && ! MxCcSet.IsKey(EdgeV[e].Val2)) {
116 TmpG->AddEdge(EdgeV[e].Val1, EdgeV[e].Val2); }
120 for (
int c = 0; c < Cn1ComV.
Len(); c++) {
121 if (MxCcSet.IsKey(Cn1ComV[c].NIdV[0])) {
122 Cn1ComV.
Del(c);
break; }
129 if (CnComV.
Empty()) {
132 int CcId = 0, MxSz = 0;
133 for (
int i = 0; i < CnComV.
Len(); i++) {
134 if (MxSz < CnComV[i].Len()) {
135 MxSz = CnComV[i].
Len();
static void Dump(const TCnComV &CnComV, const TStr &Desc=TStr())
static const T & Mn(const T &LVal, const T &RVal)
TPair< TInt, TInt > TIntPr
PUNGraph GetMxBiCon(const PUNGraph &Graph, const bool &RenumberNodes)
Returns a graph representing the largest bi-connected component on an undirected Graph.
void Del(const TSizeTy &ValN)
Removes the element at position ValN.
static const T & Mx(const T &LVal, const T &RVal)
void GetArtPoints(const PUNGraph &Graph, TIntV &ArtNIdV)
Returns articulation points of a Graph.
TSizeTy Len() const
Returns the number of elements in the vector.
void GetKeyV(TVec< TKey > &KeyV) const
void GetBiConSzCnt(const PUNGraph &Graph, TIntPrV &SzCntV)
Returns a distribution of bi-connected component sizes.
bool Empty() const
Tests whether the vector is empty.
static void GetDfsVisitor(const PGraph &Graph, TVisitor &Visitor)
Biconnected componetns Depth-First-Search visitor class.
void Clr(const bool &DoDel=true, const TSizeTy &NoDelLim=-1)
Clears the contents of the vector.
void Sort(const bool &Asc=true)
Sorts the elements of the vector.
PUNGraph GetSubGraph(const PUNGraph &Graph, const TIntV &NIdV, const bool &RenumberNodes)
Returns an induced subgraph of an undirected graph Graph with NIdV nodes with an optional node renumb...
static PUNGraph New()
Static constructor that returns a pointer to the graph. Call: PUNGraph Graph = TUNGraph::New().
int AddKey(const TKey &Key)
void Get1CnCom(const PUNGraph &Graph, TCnComV &Cn1ComV)
Returns 1-components: maximal connected components of that can be disconnected from the Graph by remo...
void Get1CnComSzCnt(const PUNGraph &Graph, TIntPrV &SzCntV)
Distribution of sizes of 1-components, maximal number of components that can be disconnected from the...
void GetBiCon(const PUNGraph &Graph, TCnComV &BiCnComV)
Returns all bi-connected components of a Graph.
void GetEdgeBridges(const PUNGraph &Graph, TIntPrV &EdgeV)
Returns bridge edges of a Graph.
Articulation point Depth-First-Search visitor class.
void GetKeyDatPrV(TVec< TPair< TKey, TDat > > &KeyDatPrV) const
TDat & AddDat(const TKey &Key)
void GetWccSzCnt(const PGraph &Graph, TIntPrV &WccSzCnt)
Returns a distribution of weakly connected component sizes.
void GetWccs(const PGraph &Graph, TCnComV &CnComV)
Returns all weakly connected components in a Graph.
static void SaveTxt(const TCnComV &CnComV, const TStr &FNm, const TStr &Desc=TStr())
TPt< TUNGraph > PUNGraph
Pointer to an undirected graph (TUNGraph)