from collections import deque def bfs(capacities, target): # 初始化队列和访问过的状态集合 queue = deque([(0, 0, 0)]) # 三个桶的初始状态 visited = set([(0, 0, 0)]) # 操作步骤计数 steps = 0 # 开始BFS搜索 while queue: for _ in range(len(queue)): current_state = queue.popleft() a, b, c = current_state # 如果找到目标状态 if target in current_state: return steps # 获取当前桶的容量 A, B, C = capacities # 对每一对桶进行操作 next_states = [ # 倒水操作:将水从一个桶倒入另一个桶 # 从a桶倒到b桶 (min(a + b, B), max(0, a + b - B), c), # 从a桶倒到c桶 (min(a + c, C), b, max(0, a + c - C)), # 从b桶倒到a桶 (min(a + b, A), max(0, a + b - A), c), # 从b桶倒到c桶 (a, min(b + c, C), max(0, b + c - C)), # 从c桶倒到a桶 (min(a + c, A), b, max(0, a + c - A)), # 从c桶倒到b桶 (a, min(b + c, B), max(0, b + c - B)), # 清空每个桶 (0, b, c), (a, 0, c), (a, b, 0), # 将每个桶填满 (A, b, c), (a, B, c), (a, b, C) ] # 遍历所有新状态 for state in next_states: if state not in visited: visited.add(state) queue.append(state) # 增加操作次数 steps += 1 return -1 # 如果找不到目标 # 容器的容量 capacities = [160, 119, 77] # 目标水量 target = 76 # 求解最少操作次数 result = bfs(capacities, target) print("最少操作次数:", result)