diff --git a/cpp/graph.hpp b/cpp/graph.hpp index f233d4c98ea6c3df4926a36a6c22d2b1a36917e6..ec318ad7193fbffdbac51fc7167fe825ac4dd653 100644 --- a/cpp/graph.hpp +++ b/cpp/graph.hpp @@ -56,6 +56,8 @@ class Graph { const Edge &getEdge(unsigned int i) const { return edges[i].e; } + const auto& getAdj() const { return adj; } + // When the degree sequence is not graphics, the Graph can be // in any state, it is not neccesarily empty bool createFromDegreeSequence(const DegreeSequence &d) { diff --git a/cpp/switchchain.cpp b/cpp/switchchain.cpp index 88c661e51c188682775e3ff0659f274d5cea1b69..188620c860f59c1cbc8690d1eed0e77dd8bf3262 100644 --- a/cpp/switchchain.cpp +++ b/cpp/switchchain.cpp @@ -2,6 +2,7 @@ #include "graph.hpp" #include "powerlaw.hpp" #include +#include #include #include #include @@ -63,6 +64,27 @@ class SwitchChain { std::bernoulli_distribution permutationDistribution; }; +void getTriangleDegrees(const Graph& g) { + std::vector> trids; + const auto& adj = g.getAdj(); + int triangles = 0; + for (auto& v : adj) { + for (unsigned int i = 0; i < v.size(); ++i) { + for (unsigned int j = i + 1; j < v.size(); ++j) { + if (g.hasEdge({v[i], v[j]})) { + ++triangles; + std::array ds = {v.size(), adj[v[i]].size(), + adj[v[j]].size()}; + std::sort(ds.begin(), ds.end()); + trids.push_back(ds); + } + } + } + } + assert(triangles % 3 == 0); + return; +} + // // Assumes degree sequence does NOT contain any zeroes! // @@ -201,7 +223,7 @@ int main() { // For a single n,tau take samples over several instances of // the degree distribution. // 500 samples seems to give reasonable results - for (int degreeSample = 0; degreeSample < 200; ++degreeSample) { + for (int degreeSample = 0; degreeSample < 1; ++degreeSample) { // Generate a graph // might require multiple tries for (int i = 1; ; ++i) { @@ -277,6 +299,7 @@ int main() { constexpr int measureSkip = 1; + int movesDone = 0; int triangles[measurements];