pub fn to_undirected(
graph: &Graph,
mode: ToUndirectedMode,
) -> IgraphResult<Graph>Expand description
Converts a directed graph to an undirected graph.
If the graph is already undirected, returns a copy.
§Modes
Each: every directed edge becomes an undirected edge. A pair of mutual edges (u→v and v→u) becomes two parallel undirected edges.Collapse: each pair of vertices gets at most one undirected edge regardless of how many directed edges connect them.Mutual: only vertex pairs connected by mutual edges (both u→v and v→u) get an undirected edge.
§Examples
use rust_igraph::{Graph, to_undirected, ToUndirectedMode};
// Mutual pair collapses to one edge
let mut g = Graph::new(3, true).unwrap();
g.add_edge(0, 1).unwrap();
g.add_edge(1, 0).unwrap();
g.add_edge(1, 2).unwrap();
let u = to_undirected(&g, ToUndirectedMode::Collapse).unwrap();
assert!(!u.is_directed());
assert_eq!(u.ecount(), 2); // (0,1) collapsed + (1,2)
let u = to_undirected(&g, ToUndirectedMode::Mutual).unwrap();
assert_eq!(u.ecount(), 1); // only (0,1) mutual pair survives
let u = to_undirected(&g, ToUndirectedMode::Each).unwrap();
assert_eq!(u.ecount(), 3); // every directed edge → undirected