summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend/Coloringaux.ml29
1 files changed, 16 insertions, 13 deletions
diff --git a/backend/Coloringaux.ml b/backend/Coloringaux.ml
index 1f4e20d..2fce25e 100644
--- a/backend/Coloringaux.ml
+++ b/backend/Coloringaux.ml
@@ -283,21 +283,24 @@ let interfere n1 n2 =
let p = if i1 < i2 then (i1, i2) else (i2, i1) in
IntPairSet.mem p !adjSet
-(* Add an edge to the graph. Assume edge is not in graph already *)
+(* Add an edge to the graph. Assume edge is not in graph already.
+ Do not add edges between nodes of different types. *)
let addEdge n1 n2 =
- (*i Printf.printf " %s -- %s;\n" (name_of_node n1) (name_of_node n2); *)
- assert (n1 != n2 && not (interfere n1 n2));
- let i1 = n1.ident and i2 = n2.ident in
- let p = if i1 < i2 then (i1, i2) else (i2, i1) in
- adjSet := IntPairSet.add p !adjSet;
- if n1.nstate <> Colored then begin
- n1.adjlist <- n2 :: n1.adjlist;
- n1.degree <- 1 + n1.degree
- end;
- if n2.nstate <> Colored then begin
- n2.adjlist <- n1 :: n2.adjlist;
- n2.degree <- 1 + n2.degree
+ if n1.typ = n2.typ then begin
+ (*i Printf.printf " %s -- %s;\n" (name_of_node n1) (name_of_node n2); *)
+ assert (n1 != n2 && not (interfere n1 n2));
+ let i1 = n1.ident and i2 = n2.ident in
+ let p = if i1 < i2 then (i1, i2) else (i2, i1) in
+ adjSet := IntPairSet.add p !adjSet;
+ if n1.nstate <> Colored then begin
+ n1.adjlist <- n2 :: n1.adjlist;
+ n1.degree <- 1 + n1.degree
+ end;
+ if n2.nstate <> Colored then begin
+ n2.adjlist <- n1 :: n2.adjlist;
+ n2.degree <- 1 + n2.degree
+ end
end
(* Apply the given function to the relevant adjacent nodes of a node *)