1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
#include <stdio.h>
#include <stdlib.h>
#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) {
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;
}
|