diff options
author | Alex Auvolat--bernstein <auvolat@clipper.ens.fr> | 2013-12-04 17:26:06 +0100 |
---|---|---|
committer | Alex Auvolat--bernstein <auvolat@clipper.ens.fr> | 2013-12-04 17:26:06 +0100 |
commit | 71094b2d48ac784e60d454609064d20e83c017be (patch) | |
tree | dc99709c9edc95e0f4b0c98a8af05045e0037b1c /algos.c | |
parent | 000a92524d2165daf7c790705fea91358b6ecf15 (diff) | |
download | AlgoProg-Projet-71094b2d48ac784e60d454609064d20e83c017be.tar.gz AlgoProg-Projet-71094b2d48ac784e60d454609064d20e83c017be.zip |
Finished implementation for algorithm C, and corrected bitset bugs.
Diffstat (limited to 'algos.c')
-rw-r--r-- | algos.c | 29 |
1 files changed, 28 insertions, 1 deletions
@@ -60,10 +60,37 @@ void max_clique_c(const graph g, set k, set c, set a, set *mc) { printf("Found new max clique: "); dump_set(*mc); fflush(stdout); } } else { - int u = elt_of_set(c); // TODO maximiser C inter Gamma(u) + set c_it = copy_set(c); + int u = elt_of_set(c_it), n = 0; + set_remove_ip(u, c_it); + + { set temp = set_inter(c, graph_neighbours(g, u)); + n = set_size(temp); + delete_set(temp); + } + + int heur = u; + while (!is_set_empty(c_it)) { + int uprime = elt_of_set(c_it); + heur = uprime; + + set_remove_ip(uprime, c_it); + + set temp = set_inter(c, graph_neighbours(g, uprime)); + if (set_size(temp) > n) { + n = set_size(temp); + u = uprime; + } + delete_set(temp); + } + delete_set(c_it); + + set t = set_diff(a, graph_neighbours(g, u)); + heur = u; while (!is_set_empty(t)) { int x = elt_of_set(t); + heur = x; set k2 = set_add(x, k); set c2 = set_inter(c, graph_neighbours(g, x)); |