|
发表于 2018-10-15 16:35:23
|
显示全部楼层
改一下,不超过30行代码。。。。。。
- state0 = [0,0] #勺子的初始状态
- maxv = [7,11] #每个勺子的对应的容积
- def nextstate(state0): #对于状态state0,推出所有可能的下一状态
- a,b=state0[0],state0[1]
- res=[(0,b),(a,0),(maxv[0],b),(a,maxv[1])] #清空,加满
- delta=maxv[0]-a if b>=maxv[0]-a else b #b-->a
- res.append((a+delta,b-delta))
- delta=maxv[1]-b if a>=maxv[1]-b else a #a-->b
- res.append((a-delta,b+delta))
- res=list(set(res))
- if (a,b) in res:
- res.remove((a,b))
- return res
-
- from collections import deque
- res =[]
- def findway(ways):
- for state in nextstate(ways[-1]): #遍历下一状态(ways[-1]表示最后一个状态)
- if state not in ways: #当前状态未出现过。
- ways.append(state) #添加新结果
- if state[0] == 2 or state[1]==2:
- res.append(deque(ways))
- else:
- findway(ways) #递归搜索
- ways.pop() #去除当前循环中添加的状态(回归上一级,搜索另一支线。)
- findway([state0])
- bestway=sorted(res,key=lambda x:len(x))[0]
- print("最佳路径(共"+str(len(bestway))+"步):",[x for x in bestway])
复制代码 |
|