def graph_to_int(graph): """Encode a graph as an integer.""" max_node = len(graph.nodes) encoded = 0 k = 1 for i, edge in enumerate(g.complete_graph_edges(max_node)): if edge in graph.edges: encoded |= k k <<= 1 return encoded
def int_to_graph(i, n=1): """Decode an integer as a graph.""" while 1 << g.choose(n, 2) <= i: n += 1 graph = g.Graph() graph.add_nodes(xrange(1, n + 1)) k = 1 for edge in g.complete_graph_edges(n): if i & k: graph.add_edge(*edge) k <<= 1 return graph