SNAP Library 2.0, Developer Reference
2013-05-13 16:33:57
SNAP, a general purpose, high performance system for analysis and manipulation of large networks
|
Strongly connected componetns Depht-First-Search visitor class. More...
#include <cncom.h>
Public Member Functions | |
TSccVisitor (const PGraph &_Graph) | |
void | DiscoverNode (int NId) |
void | FinishNode (const int &NId) |
void | ExamineEdge (const int &NId1, const int &NId2) |
void | TreeEdge (const int &NId1, const int &NId2) |
void | BackEdge (const int &NId1, const int &NId2) |
void | FwdEdge (const int &NId1, const int &NId2) |
int | GetMinDiscTm (const int &NId1, const int &NId2) const |
Public Attributes | |
PGraph | Graph |
THash< TInt, TIntPr > | TmRtH |
TSStack< TInt > | Stack |
TInt | Time |
TIntH | SccCntH |
TCnComV | CnComV |
Strongly connected componetns Depht-First-Search visitor class.
TSccVisitor< PGraph, OnlyCount >::TSccVisitor | ( | const PGraph & | _Graph | ) | [inline] |
void TSccVisitor< PGraph, OnlyCount >::BackEdge | ( | const int & | NId1, |
const int & | NId2 | ||
) | [inline] |
void TSccVisitor< PGraph, OnlyCount >::DiscoverNode | ( | int | NId | ) | [inline] |
Definition at line 240 of file cncom.h.
References THash< TKey, TDat, THashFunc >::AddDat(), TSStack< TVal >::Push(), TSccVisitor< PGraph, OnlyCount >::Stack, TSccVisitor< PGraph, OnlyCount >::Time, and TSccVisitor< PGraph, OnlyCount >::TmRtH.
{ Time++; TmRtH.AddDat(NId, TIntPr(-Time, NId)); // negative time -- node not yet in any SCC Stack.Push(NId); }
void TSccVisitor< PGraph, OnlyCount >::ExamineEdge | ( | const int & | NId1, |
const int & | NId2 | ||
) | [inline] |
void TSccVisitor< PGraph, OnlyCount >::FinishNode | ( | const int & | NId | ) | [inline] |
Definition at line 243 of file cncom.h.
References TCnCom::Add(), TVec< TVal, TSizeTy >::Add(), THash< TKey, TDat, THashFunc >::AddDat(), THash< TKey, TDat, THashFunc >::GetDat(), TSccVisitor< PGraph, OnlyCount >::GetMinDiscTm(), TSccVisitor< PGraph, OnlyCount >::Graph, TVec< TVal, TSizeTy >::Last(), TSStack< TVal >::Pop(), TSccVisitor< PGraph, OnlyCount >::SccCntH, TSccVisitor< PGraph, OnlyCount >::Stack, TSccVisitor< PGraph, OnlyCount >::TmRtH, TSStack< TVal >::Top(), TPair< TVal1, TVal2 >::Val1, and TPair< TVal1, TVal2 >::Val2.
{ typename PGraph::TObj::TNodeI NI = Graph->GetNI(NId); TIntPr& TmRtN = TmRtH.GetDat(NId); int W = -1, Cnt = 0; for (int i = 0; i < NI.GetOutDeg(); i++) { W = NI.GetOutNId(i); const TIntPr& TmRtW = TmRtH.GetDat(W); if (TmRtW.Val1 < 0) { // node not yet in any SCC TmRtN.Val2 = GetMinDiscTm(TmRtN.Val2, TmRtW.Val2); } } if (TmRtN.Val2 == NId) { if (! OnlyCount) { CnComV.Add(); } do { W = Stack.Top(); Stack.Pop(); if (OnlyCount) { Cnt++; } else { CnComV.Last().Add(W); } TmRtH.GetDat(W).Val1 = abs(TmRtH.GetDat(W).Val1); // node is in SCC } while (W != NId); if (OnlyCount) { SccCntH.AddDat(Cnt) += 1; } } }
void TSccVisitor< PGraph, OnlyCount >::FwdEdge | ( | const int & | NId1, |
const int & | NId2 | ||
) | [inline] |
int TSccVisitor< PGraph, OnlyCount >::GetMinDiscTm | ( | const int & | NId1, |
const int & | NId2 | ||
) | const [inline] |
Definition at line 263 of file cncom.h.
References THash< TKey, TDat, THashFunc >::GetDat(), TSccVisitor< PGraph, OnlyCount >::TmRtH, and TPair< TVal1, TVal2 >::Val1.
Referenced by TSccVisitor< PGraph, OnlyCount >::FinishNode().
void TSccVisitor< PGraph, OnlyCount >::TreeEdge | ( | const int & | NId1, |
const int & | NId2 | ||
) | [inline] |
TCnComV TSccVisitor< PGraph, OnlyCount >::CnComV |
Definition at line 236 of file cncom.h.
Referenced by TSnap::GetSccs().
PGraph TSccVisitor< PGraph, OnlyCount >::Graph |
Definition at line 231 of file cncom.h.
Referenced by TSccVisitor< PGraph, OnlyCount >::FinishNode().
TIntH TSccVisitor< PGraph, OnlyCount >::SccCntH |
Definition at line 235 of file cncom.h.
Referenced by TSccVisitor< PGraph, OnlyCount >::FinishNode(), and TSnap::GetSccSzCnt().
TSStack<TInt> TSccVisitor< PGraph, OnlyCount >::Stack |
Definition at line 233 of file cncom.h.
Referenced by TSccVisitor< PGraph, OnlyCount >::DiscoverNode(), and TSccVisitor< PGraph, OnlyCount >::FinishNode().
TInt TSccVisitor< PGraph, OnlyCount >::Time |
Definition at line 234 of file cncom.h.
Referenced by TSccVisitor< PGraph, OnlyCount >::DiscoverNode().
THash<TInt, TIntPr> TSccVisitor< PGraph, OnlyCount >::TmRtH |
Definition at line 232 of file cncom.h.
Referenced by TSccVisitor< PGraph, OnlyCount >::DiscoverNode(), TSccVisitor< PGraph, OnlyCount >::FinishNode(), and TSccVisitor< PGraph, OnlyCount >::GetMinDiscTm().