Skip to main content

to_undirected

Function to_undirected 

Source
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