From 77db931b94870a8f28eef482091924471cd18d64 Mon Sep 17 00:00:00 2001 From: Alex Auvolat--bernstein Date: Wed, 4 Dec 2013 16:34:15 +0100 Subject: Algorithm B works. --- algos.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 algos.c (limited to 'algos.c') diff --git a/algos.c b/algos.c new file mode 100644 index 0000000..07c667a --- /dev/null +++ b/algos.c @@ -0,0 +1,62 @@ +#include "algos.h" + +void max_clique_a(const graph g, set k, set c, set *mc) { + if (is_set_empty(c)) { + if (set_size(k) > set_size(*mc)) { + delete_set(*mc); + *mc = copy_set(k); + printf("Found new max clique: "); dump_set(*mc); fflush(stdout); + } + } else { + set cc = copy_set(c); + while (!(is_set_empty(cc))) { + int x = elt_of_set(cc); + set_remove_ip(x, cc); + + set k2 = set_add(x, k); + set c2 = set_inter(c, graph_neighbours(g, x)); + max_clique_a(g,k2, c2, mc); + delete_set(k2); + delete_set(c2); + } + delete_set(cc); + } +} + +void max_clique_b(const graph g, set k, set c, set a, set *mc) { + if (is_set_empty(c)) { + if (set_size(k) > set_size(*mc)) { + delete_set(*mc); + *mc = copy_set(k); + printf("Found new max clique: "); dump_set(*mc); fflush(stdout); + } + } else { + set at = copy_set (a); + while (!(is_set_empty(at))) { + int x = elt_of_set(at); + set_remove_ip(x, at); + + set k2 = set_add(x, k); + set c2 = set_inter(c, graph_neighbours(g, x)); + set a2 = set_inter(at, graph_neighbours(g, x)); + + max_clique_b(g,k2, c2, a2, mc); + delete_set(k2); + delete_set(c2); + delete_set(a2); + } + delete_set(at); + } +} + +void max_clique_c(const graph g, set k, set c, set a, set *mc) { + if (is_set_empty(c)) { + if (set_size(k) > set_size(*mc)) { + delete_set(*mc); + *mc = copy_set(k); + printf("Found new max clique: "); dump_set(*mc); fflush(stdout); + } + } else { + //TODO + } +} -- cgit v1.2.3