use crate::graph::builders::GraphBuilder;
use crate::graph::Graph;
pub fn erdos_renyi_graph<T>(n: usize, p: f64, directed: bool, seed: u64) -> Graph<T, f64>
where
T: Clone + Default,
{
let mut builder = if directed {
GraphBuilder::directed()
} else {
GraphBuilder::undirected()
};
builder = builder.with_nodes((0..n).map(|_| T::default()));
#[cfg(feature = "rand")]
{
use rand::Rng;
let mut rng = rand::thread_rng();
let _ = seed;
for i in 0..n {
for j in (if directed { 0 } else { i + 1 })..n {
if i != j && rng.r#gen::<f64>() < p {
builder = builder.with_edge(i, j, 1.0);
}
}
}
}
#[cfg(not(feature = "rand"))]
{
let _ = (n, p, seed); }
builder.build().unwrap_or_else(|_| Graph::directed())
}