PBPGraph GenRndBipart(const int& LeftNodes, const int& RightNodes, const int& Edges, TRnd& Rnd) { PBPGraph G = TBPGraph::New(); for (int i = 0; i < LeftNodes; i++) { G->AddNode(i, true); } for (int i = 0; i < RightNodes; i++) { G->AddNode(LeftNodes+i, false); } IAssertR(Edges <= LeftNodes*RightNodes, "Too many edges in the bipartite graph!"); for (int edges = 0; edges < Edges; ) { const int LNId = Rnd.GetUniDevInt(LeftNodes); const int RNId = LeftNodes + Rnd.GetUniDevInt(RightNodes); if (G->AddEdge(LNId, RNId) != -2) { edges++; } // is new edge } return G; }
PBPGraph TBPGraph::GetSmallGraph() { PBPGraph BP = TBPGraph::New(); BP->AddNode(0, true); BP->AddNode(1, true); BP->AddNode(2, false); BP->AddNode(3, false); BP->AddNode(4, false); BP->AddEdge(0, 2); BP->AddEdge(0, 3); BP->AddEdge(1, 2); BP->AddEdge(1, 3); BP->AddEdge(1, 4); return BP; }