#include #include #include "cover.h" int main(int argc, char* argv[]) { FILE* file = fopen(argv[1], "r"); int n_sets, n_elements = 0; int current_element = 0; bucket *tail, *head = NULL; fscanf(file, "%d %d", &n_sets, &n_elements); parent** parents = malloc(n_elements*sizeof(parent*)); for (int element_id = 0; element_id < n_elements; element_id++) { parents[element_id] = NULL; } for(int current_set = 0; current_set < n_sets; current_set++) { fscanf(file, "%d", &n_elements); set* s = new_set(current_set); bucket* current_bucket = tail; int j; for(j = 0; j < n_elements; j++) { fscanf(file, "%d", ¤t_element); element* el = insert_element(s, current_element); insert_parent(parents, el); if (current_bucket && current_bucket->size < (j + 1)) { current_bucket = current_bucket->next; } } if (!current_bucket) { // TODO: unify this, with attach_set bucket* b = new_bucket(s, j); b->prev = head; if (head) { head->next = b; head = b; } else { head = tail = b; } } else if (current_bucket->size == j) { insert_set(s, current_bucket); } else if (current_bucket->size > j) { bucket* b = new_bucket(s, j); b->next = current_bucket; b->prev = current_bucket->prev; current_bucket->prev = b; if (!b->prev) { tail = b; } } } greedy(head, parents); return 0; }