///|
pub fn order_add_subgraph_constraints(
g : Graph,
cg : Graph,
vs : Array[String],
) -> Unit {
let prev : Map[String, String] = Map::new()
let mut root_prev : String? = None
for v in vs {
let mut child = g.parent(v)
while child is Some(child_v) {
let parent = g.parent(child_v)
let prev_child = if parent is Some(parent_v) {
let value = prev.get(parent_v)
prev.set(parent_v, child_v)
value
} else {
let value = root_prev
root_prev = Some(child_v)
value
}
if prev_child is Some(prev_v) {
if prev_v != child_v {
cg.set_edge(prev_v, child_v)
break
}
}
child = parent
}
}
}