from collections import deque def solve_water_jug(c1, c2, target): queue, visited = deque([(0, 0, [])]), set() while queue: j1, j2, path = queue.popleft() if j1 == target or j2 == target: return path + [(j1, j2)] if (j1, j2) in visited: continue visited.add((j1, j2)) queue.extend([(c1, j2, path + [(j1, j2)]), (j1, c2, path + [(j1, j2)]), (0, j2, path + [(j1, j2)]), (j1, 0, path + [(j1, j2)]), (j1 - min(j1, c2 - j2), j2 + min(j1, c2 - j2), path + [(j1, j2)]), (j1 + min(j2, c1 - j1), j2 - min(j2, c1 - j1), path + [(j1, j2)])]) return None # Example usage c1, c2, target = 4, 3, 2 #Jug 1 capacity: 4, Jug 2 capacity: 3, Target: 2 solution = solve_water_jug(c1, c2, target) if solution: for step, (j1, j2) in enumerate(solution): print(f"Step {step}: Jug1 = {j1}, Jug2 = {j2}") else: print("No solution exists.") ''' Step 0: Jug1 = 0, Jug2 = 0 Step 1: Jug1 = 4, Jug2 = 0 Step 2: Jug1 = 1, Jug2 = 3 Step 3: Jug1 = 1, Jug2 = 0 Step 4: Jug1 = 0, Jug2 = 1 Step 5: Jug1 = 4, Jug2 = 1 Step 6: Jug1 = 2, Jug2 = 3 '''