summaryrefslogtreecommitdiff
path: root/algos.c
diff options
context:
space:
mode:
authorAlex Auvolat--bernstein <auvolat@clipper.ens.fr>2013-12-04 16:34:15 +0100
committerAlex Auvolat--bernstein <auvolat@clipper.ens.fr>2013-12-04 16:34:15 +0100
commit77db931b94870a8f28eef482091924471cd18d64 (patch)
tree827ec4d9f3898a87bb7b51f430f532a03389f559 /algos.c
parent7cbbe99bca6c8dfccf3b85de8909ba94e2b03b44 (diff)
downloadAlgoProg-Projet-77db931b94870a8f28eef482091924471cd18d64.tar.gz
AlgoProg-Projet-77db931b94870a8f28eef482091924471cd18d64.zip
Algorithm B works.
Diffstat (limited to 'algos.c')
-rw-r--r--algos.c62
1 files changed, 62 insertions, 0 deletions
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
+ }
+}