from collections import deque def water_jug_solver(jug1, jug2, aim): visited = set() q = deque([(0, 0)]) while q: a, b = q.popleft() if (a, b) in visited: continue print(a, b) if a == aim or b == aim: print("Reached the goal!") return visited.add((a, b)) q.extend([ (0, b), (a, 0), (jug1, b), (a, jug2), (a + min(b, jug1 - a), b - min(b, jug1 - a)), (a - min(a, jug2 - b), b + min(a, jug2 - b)) ]) print("No solution.") # Input jug1 = int(input("Jug 1: ")) jug2 = int(input("Jug 2: ")) aim = int(input("Goal: ")) water_jug_solver(jug1, jug2, aim)