···123123 let g = Hashtbl.fold (fun _ v g -> B.add_vertex g v) vert (B.empty ()) in
124124 let g = Hashtbl.fold (fun i vi g ->
125125 Hashtbl.fold (fun j vj g ->
126126- if i land j = 0 then B.add_edge g vi vj else g) vert g) vert g in
126126+ if i <> j && i land j = 0 then B.add_edge g vi vj else g)
127127+ vert g) vert g in
127128 g
128129129130 let petersen () =
+5-2
src/classic.mli
···6161 (** [kneser n k] builds the Kneser graph K(n, k), where vertices
6262 correspond to the k-element subsets of a set of n elements, and
6363 where two vertices are adjacent if and only if the two
6464- corresponding sets are disjoint. *)
6464+ corresponding sets are disjoint.
6565+6666+ Each vertex is labeled with a n-bit integer with exactly k bits
6767+ set (bit i indicates the selection of the i-th element). *)
65686669 val petersen : unit -> graph
6770 (** [petersen ()] builds the Petersen graph, that is isomorphic
6868- to the Kneser graph K(5,2). It has 10 vertices and 15 edges. *)
7171+ to the Kneser graph K(5,2). *)
69727073end
7174
+6-2
src/sig_pack.mli
···361361 (** [kneser n k] builds the Kneser graph K(n, k), where vertices
362362 correspond to the k-element subsets of a set of n elements, and
363363 where two vertices are adjacent if and only if the two
364364- corresponding sets are disjoint. *)
364364+ corresponding sets are disjoint.
365365+366366+ Each vertex is labeled with a n-bit integer with exactly k
367367+ bits set (bit i indicates the selection of the i-th
368368+ element). *)
365369366370 val petersen : unit -> t
367371 (** [petersen ()] builds the Petersen graph, that is isomorphic
368368- to the Kneser graph K(5,2). It has 10 vertices and 15 edges. *)
372372+ to the Kneser graph K(5,2). *)
369373 end
370374371375 (** Random graphs *)
+17-1
tests/test_classic.ml
···1515(* *)
1616(**************************************************************************)
17171818-open Graph.Pack.Graph
1818+open Graph.Pack.Graph (* undirected graphs *)
19192020let g = Classic.petersen ()
2121let () = assert (nb_vertex g = 10)
···24242525let g = Classic.kneser ~n:7 ~k:3
2626let () = dot_output g "k_7_3.dot"
2727+2828+let g = Classic.kneser ~n:0 ~k:0
2929+let () = assert (nb_vertex g = 1)
3030+let () = assert (nb_edges g = 0)
3131+3232+let g = Classic.kneser ~n:1 ~k:0
3333+let () = assert (nb_vertex g = 1)
3434+let () = assert (nb_edges g = 0)
3535+3636+let g = Classic.kneser ~n:1 ~k:1
3737+let () = assert (nb_vertex g = 1)
3838+let () = assert (nb_edges g = 0)
3939+4040+let g = Classic.kneser ~n:2 ~k:1
4141+let () = assert (nb_vertex g = 2)
4242+let () = assert (nb_edges g = 1)