19template <
typename GraphType = Graph<
int>>
20 requires NumericNodeID<typename GraphType::NodeType>
27GraphType complete_graph(
size_t n) {
29 using NodeID =
typename GraphType::NodeType;
30 for (
size_t i = 0; i < n; ++i) {
31 if constexpr (GraphType::is_directed) {
32 for (
size_t j = 0; j < n; ++j) {
34 G.add_edge(
static_cast<NodeID
>(i),
static_cast<NodeID
>(j));
37 for (
size_t j = i + 1; j < n; ++j) {
38 G.add_edge(
static_cast<NodeID
>(i),
static_cast<NodeID
>(j));
45template <
typename GraphType = Graph<
int>>
46 requires NumericNodeID<typename GraphType::NodeType>
53GraphType path_graph(
size_t n) {
55 using NodeID =
typename GraphType::NodeType;
59 for (
size_t i = 0; i < n - 1; ++i) {
60 G.add_edge(
static_cast<NodeID
>(i),
static_cast<NodeID
>(i + 1));
65template <
typename GraphType = Graph<
int>>
66 requires NumericNodeID<typename GraphType::NodeType>
75GraphType erdos_renyi_graph(
size_t n,
double p,
int seed = 42) {
77 using NodeID =
typename GraphType::NodeType;
78 std::mt19937 gen(seed);
79 std::uniform_real_distribution<> dis(0.0, 1.0);
81 for (
size_t i = 0; i < n; ++i) {
82 G.add_node(
static_cast<NodeID
>(i));
85 for (
size_t i = 0; i < n; ++i) {
86 for (
size_t j = 0; j < (GraphType::is_directed ? n : i); ++j) {
89 G.add_edge(
static_cast<NodeID
>(i),
static_cast<NodeID
>(j));
Core graph wrapper, proxy surface, and public alias presets.