From 14ca51db92e15cfd0e9fffdc0eb1fc7296cb463f Mon Sep 17 00:00:00 2001 From: Simon Cruanes Date: Thu, 7 Mar 2013 16:55:50 +0100 Subject: [PATCH] bugfix: Graph.is_dag must explore every vertex --- graph.ml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/graph.ml b/graph.ml index da70f08a..0b8b99d0 100644 --- a/graph.ml +++ b/graph.ml @@ -213,14 +213,13 @@ let dfs graph first k = (** Is the graph acyclic? *) let is_dag g = if is_empty g then true - else if Sequence.is_empty (roots g) then false (* DAGs have roots *) else try let labels = mk_v_table g in (* do a DFS from each root; any back edge indicates a cycle *) Sequence.iter (fun v -> dfs_full g ~labels ~back_edge:(fun _ -> raise Exit) v) - (roots g); + (vertices g); true (* complete traversal without back edge *) with Exit -> false (* back edge detected! *)