#ifndef _dlx_h #define _dlx_h #include #include typedef unsigned int depth_t; typedef int column_name; #define COLUMN_NAME_MAX INT_MAX #define COLUMN_NAME_MIN INT_MIN /* * Column and data object */ struct cell { struct cell *L; struct cell *R; struct cell *U; struct cell *D; struct cell *C; size_t S; column_name N; }; struct cell *create_empty_matrix(); void free_matrix(struct cell *h); int add_set(struct cell **xp, column_name *set, size_t n_set_elem); int dlx_solve(const struct cell *h, depth_t k, struct cell ***output_arr, size_t *output_arr_size); int solve(const struct cell *h, size_t suggested_set_size, int ***set_covers, size_t **set_cover_sizes, size_t *n_sets); #endif