Raw File
gen-cliques.cpp
#include <iostream>
#include <fstream>
#include <tlx/cmdline_parser.hpp>

#include "defs.hpp"

int main(int argc, char* argv[]) {
	tlx::CmdlineParser cp;
	cp.set_description("Generate a graph consisting of disjoint cliques");

	size_t clique_size;
	cp.add_param_size_t("clique_size", clique_size, "Number of nodes per clique");

	size_t num_cliques;
	cp.add_param_size_t("num_cliques", num_cliques, "Number of disjoint cliques");

	std::string output_filename;
	cp.add_param_string("output", output_filename, "Output graph file");

	if (!cp.process(argc, argv)) {
		return -1;
	}

	std::ofstream out(output_filename, std::ios::binary);

	node_t edge[2];
	for (node_t clique=0; clique<num_cliques; ++clique) {
		node_t first = (clique*clique_size)+1;
		node_t last = first+clique_size-1;
		for (node_t u=first; u<last; ++u) {
			edge[0] = u;
			for (node_t v=u+1; v<=last; ++v) {
				edge[1] = v;
				out.write(reinterpret_cast<char*>(&edge), sizeof(edge));
			}
		}
	}
}
back to top