# find all paths from start to goal in graph def search(start, goal, graph): solns = [] generate([start], goal, solns, graph) # collect paths solns.sort( lambda x, y: cmp(len(x), len(y)) ) # sort by path length return solns def generate(path, goal, solns, graph): state = path[-1] if state == goal: # found goal here solns.append(path) # change solns in-place else: # check all arcs here for arc in graph[state]: # skip cycles on path if arc not in path: generate(path + [arc], goal, solns, graph) if __name__ == '__main__': import gtestfunc gtestfunc.tests(search)