import networkx as nx def hamilton(G): F = [(G,[list(G.nodes())[0]])] n = G.number_of_nodes() while F: graph,path = F.pop() confs = [] neighbors = (node for node in graph.neighbors(path[-1]) if node != path[-1]) #exclude self loops for neighbor in neighbors: conf_p = path[:] conf_p.append(neighbor) conf_g = nx.Graph(graph) conf_g.remove_node(path[-1]) confs.append((conf_g,conf_p)) for g,p in confs: if len(p)==n: return p else: F.append((g,p)) return None