from sys import argv if len(argv) != 4: print("usage:",argv[0],"[dimension] [enumerate] [encode]") print("dimension (integer): dimension to consider") print("enumerate (0 or 1) : whether to enumerate all graphs") print("encode (0 or 1) : whether to print graph6-encoding") exit() d = int(argv[1]) enumerate_graphs = int(argv[2]) encode = int(argv[3]) assert(d in [2,3,4,5]) assert(enumerate_graphs in [0,1]) assert(encode in [0,1]) print("Here follows a list of all anti-triangle-free graphs of order up to and including",2*d+2, \ "not containing a clique of size", d + 2, ".\n") def extend(g, i): extensions = set() n = len(g) dmin = min(g.degree()) if n > 0 else 0 for k in [max(0, n - d - 1)..n]: # every vertex has at least n-d-1 neighbors if k > dmin+1: continue # w.l.o.g. the new vertex is of minimum degree for s in Subsets(g.vertices(),k): h = g.copy(immutable=False) h.add_vertex(i); for j in s: h.add_edge(i,j) if h.complement().is_triangle_free() \ and h.clique_number() < d+2: extensions.add(h.canonical_label().copy(immutable=True)) return extensions gr = {0:{Graph(0).copy(immutable=True)}} # initialize empty graph i = 0 for i in [1..2*d+2]: gr[i] = set() for g in gr[i-1]: gr[i] |= extend(g, i) print(len(gr[i]),"abstract almost-equidistant graphs on",i,"vertices:") if enumerate_graphs: filename = "./graphs/graphs"+str(d)+"_"+str(i)+(".g6" if encode else ".txt") with open(filename,"w") as f: for g in gr[i]: s = g.graph6_string() if encode else str((g.vertices(),g.edges(labels=False))) f.write(s+"\n") print("graphs written to file:",filename) f.close()