pub fn triangle_count<G: Graph>(graph: &G) -> usizeExpand description
Count the number of triangles in an undirected graph.
Uses the sorted-adjacency intersection approach: for each edge (u, v) where u < v, count common neighbors w > v. This avoids triple-counting.
Time: O(m * sqrt(m)) where m = number of edges.
use graphops::graph::Graph;
use graphops::triangle::triangle_count;
struct G(Vec<Vec<usize>>);
impl Graph for G {
fn node_count(&self) -> usize { self.0.len() }
fn neighbors(&self, n: usize) -> Vec<usize> { self.0[n].clone() }
}
// K3: 0-1-2 (complete triangle)
let g = G(vec![vec![1, 2], vec![0, 2], vec![0, 1]]);
assert_eq!(triangle_count(&g), 1);