|
SNAP Library 2.1, Developer Reference
2013-09-25 10:47:25
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
|
#include <cncom.h>

Public Member Functions | |
| TCnCom () | |
| TCnCom (const TIntV &NodeIdV) | |
| TCnCom (const TCnCom &CC) | |
| TCnCom (TSIn &SIn) | |
| void | Save (TSOut &SOut) const |
| TCnCom & | operator= (const TCnCom &CC) |
| bool | operator== (const TCnCom &CC) const |
| bool | operator< (const TCnCom &CC) const |
| int | Len () const |
| bool | Empty () const |
| void | Clr () |
| void | Add (const int &NodeId) |
| const TInt & | operator[] (const int &NIdN) const |
| const TIntV & | operator() () const |
| TIntV & | operator() () |
| void | Sort (const bool &Asc=true) |
| bool | IsNIdIn (const int &NId) const |
| const TInt & | GetRndNId () const |
Static Public Member Functions | |
| static void | Dump (const TCnComV &CnComV, const TStr &Desc=TStr()) |
| static void | SaveTxt (const TCnComV &CnComV, const TStr &FNm, const TStr &Desc=TStr()) |
| template<class PGraph , class TVisitor > | |
| static void | GetDfsVisitor (const PGraph &Graph, TVisitor &Visitor) |
Public Attributes | |
| TIntV | NIdV |
Connected Component. Connected component is defined by a vector of its node IDs.
| TCnCom::TCnCom | ( | ) | [inline] |
| TCnCom::TCnCom | ( | const TIntV & | NodeIdV | ) | [inline] |
| TCnCom::TCnCom | ( | const TCnCom & | CC | ) | [inline] |
| TCnCom::TCnCom | ( | TSIn & | SIn | ) | [inline] |
| void TCnCom::Add | ( | const int & | NodeId | ) | [inline] |
Definition at line 104 of file cncom.h.
References TVec< TVal, TSizeTy >::Add(), and NIdV.
Referenced by TSccVisitor< PGraph, OnlyCount >::FinishNode().


| void TCnCom::Clr | ( | ) | [inline] |
| void TCnCom::Dump | ( | const TCnComV & | CnComV, |
| const TStr & | Desc = TStr() |
||
| ) | [static] |
Definition at line 3 of file cncom.cpp.
References TStr::CStr(), TStr::Empty(), TVec< TVal, TSizeTy >::Len(), and NIdV.
{
if (! Desc.Empty()) { printf("%s:\n", Desc.CStr()); }
for (int cc = 0; cc < CnComV.Len(); cc++) {
const TIntV& NIdV = CnComV[cc].NIdV;
printf("%d : ", NIdV.Len());
for (int i = 0; i < NIdV.Len(); i++) { printf(" %d", NIdV[i].Val); }
printf("\n");
}
}

| bool TCnCom::Empty | ( | ) | const [inline] |
| void TCnCom::GetDfsVisitor | ( | const PGraph & | Graph, |
| TVisitor & | Visitor | ||
| ) | [static] |
Depth-First-Search. Depending on the stage of DFS a different member function of Visitor class is called. See source code for details.
Definition at line 121 of file cncom.h.
References THash< TKey, TDat, THashFunc >::AddDat(), TSStack< TVal >::Empty(), THash< TKey, TDat, THashFunc >::GetDat(), THash< TKey, TDat, THashFunc >::IsKey(), TSStack< TVal >::Pop(), TSStack< TVal >::Push(), TSStack< TVal >::Top(), TTriple< TVal1, TVal2, TVal3 >::Val1, TTriple< TVal1, TVal2, TVal3 >::Val2, and TTriple< TVal1, TVal2, TVal3 >::Val3.
Referenced by TSnap::GetArtPoints(), TSnap::GetBiCon(), TSnap::GetSccs(), and TSnap::GetSccSzCnt().
{
const int Nodes = Graph->GetNodes();
TSStack<TIntTr> Stack(Nodes);
int edge=0, Deg=0, U=0;
TIntH ColorH(Nodes);
typename PGraph::TObj::TNodeI NI, UI;
for (NI = Graph->BegNI(); NI < Graph->EndNI(); NI++) {
U = NI.GetId();
if (! ColorH.IsKey(U)) { // is unvisited node
ColorH.AddDat(U, 1);
Visitor.DiscoverNode(U); // discover
Stack.Push(TIntTr(U, 0, Graph->GetNI(U).GetOutDeg()));
while (! Stack.Empty()) {
const TIntTr& Top = Stack.Top();
U=Top.Val1; edge=Top.Val2; Deg=Top.Val3;
typename PGraph::TObj::TNodeI UI = Graph->GetNI(U);
Stack.Pop();
while (edge != Deg) {
const int V = UI.GetOutNId(edge);
Visitor.ExamineEdge(U, V); // examine edge
if (! ColorH.IsKey(V)) {
Visitor.TreeEdge(U, V); // tree edge
Stack.Push(TIntTr(U, ++edge, Deg));
U = V;
ColorH.AddDat(U, 1);
Visitor.DiscoverNode(U); // discover
UI = Graph->GetNI(U);
edge = 0; Deg = UI.GetOutDeg();
}
else if (ColorH.GetDat(V) == 1) {
Visitor.BackEdge(U, V); // edge upward
++edge; }
else {
Visitor.FwdEdge(U, V); // edge downward
++edge; }
}
ColorH.AddDat(U, 2);
Visitor.FinishNode(U); // finish
}
}
}
}


| const TInt& TCnCom::GetRndNId | ( | ) | const [inline] |
Definition at line 110 of file cncom.h.
References TRnd::GetUniDevInt(), Len(), NIdV, and TInt::Rnd.
{ return NIdV[TInt::Rnd.GetUniDevInt(Len())]; }

| bool TCnCom::IsNIdIn | ( | const int & | NId | ) | const [inline] |
| int TCnCom::Len | ( | ) | const [inline] |
Definition at line 101 of file cncom.h.
References TVec< TVal, TSizeTy >::Len(), and NIdV.
Referenced by GetRndNId().


| const TIntV& TCnCom::operator() | ( | ) | const [inline] |
| TIntV& TCnCom::operator() | ( | ) | [inline] |
| bool TCnCom::operator< | ( | const TCnCom & | CC | ) | const [inline] |
| bool TCnCom::operator== | ( | const TCnCom & | CC | ) | const [inline] |
| const TInt& TCnCom::operator[] | ( | const int & | NIdN | ) | const [inline] |
| void TCnCom::Save | ( | TSOut & | SOut | ) | const [inline] |
| void TCnCom::SaveTxt | ( | const TCnComV & | CnComV, |
| const TStr & | FNm, | ||
| const TStr & | Desc = TStr() |
||
| ) | [static] |
Definition at line 13 of file cncom.cpp.
References TStr::CStr(), TStr::Empty(), TVec< TVal, TSizeTy >::Len(), and NIdV.
{
FILE *F = fopen(FNm.CStr(), "wt");
if (! Desc.Empty()) { fprintf(F, "# %s\n", Desc.CStr()); }
fprintf(F, "# Connected Components:\t%d\n", CnComV.Len());
fprintf(F, "# Connected components (format: <Size>\\t<NodeId1>\\t<NodeId2>...)\n");
for (int cc = 0; cc < CnComV.Len(); cc++) {
const TIntV& NIdV = CnComV[cc].NIdV;
fprintf(F, "%d", NIdV.Len());
for (int i = 0; i < NIdV.Len(); i++) { fprintf(F, "\t%d", NIdV[i].Val); }
fprintf(F, "\n");
}
fclose(F);
}

| void TCnCom::Sort | ( | const bool & | Asc = true | ) | [inline] |
Definition at line 90 of file cncom.h.
Referenced by Add(), Clr(), Dump(), Empty(), GetRndNId(), IsNIdIn(), Len(), operator()(), operator<(), operator=(), operator==(), operator[](), Save(), SaveTxt(), and Sort().