diff --git a/cpp/graph_powerlaw.hpp b/cpp/graph_powerlaw.hpp index 9d6981eaef64d669f6d06bdf6f604698a532eaa7..bd6eaee6790916f5583bac67db0ce83135ba6d93 100644 --- a/cpp/graph_powerlaw.hpp +++ b/cpp/graph_powerlaw.hpp @@ -33,3 +33,22 @@ void generatePowerlawGraph(int n, float tau, Graph& g, DegreeSequence& ds, } } } + +void generateCanonicalPowerlawGraph(int n, float tau, Graph &g, + DegreeSequence &ds) { + ds.resize(n); + powerlaw_distribution degDist(tau, 1, n); + degDist.getFixedDistribution(n, ds.begin()); + + unsigned int sum = std::accumulate(ds.begin(), ds.end(), 0); + if (sum % 2) { + //TODO: Can we do this: ?? + ds.back()++; + } + + if (g.createFromDegreeSequence(ds)) + return; + g.reset(n); + std::cerr << "ERROR: Canonical ds is not graphical" << std::endl; +} +