鱼C论坛

 找回密码
 立即注册
楼主: jerryxjr1220

[技术交流] python小练习(065):探索法(广度优先搜索)30行代码求解倒酒问题

[复制链接]
发表于 2018-4-8 21:33:47 | 显示全部楼层
666
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-23 14:03:47 | 显示全部楼层
学习!感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-14 06:01:22 | 显示全部楼层
aaaaaaaaaaaaaa
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-14 11:55:45 | 显示全部楼层
我只想看答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-15 11:13:27 | 显示全部楼层
看答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-15 15:18:07 | 显示全部楼层
  1. state0 = [0,0]   #勺子的初始状态
  2. maxv = [7,11]    #每个勺子的对应的容积
  3. def nextstate(state0):    #对于状态state0,推出所有可能的下一状态
  4.     a,b=state0[0],state0[1]   
  5.     if a>0:   #倒空某个勺子
  6.         yield [0,b]
  7.     if b>0:
  8.         yield [a,0]

  9.     if a<maxv[0]:
  10.         yield [maxv[0],b]  #从酒缸里装满某个勺子
  11.         tmp=maxv[0]-a   #差值
  12.         if b>=tmp:            
  13.             yield [maxv[0],b-tmp]
  14.         else:
  15.             yield [a+b,0]

  16.     if b<maxv[1]:
  17.         yield [a,maxv[1]]   
  18.         tmp=maxv[1]-b   #差值
  19.         if a>=tmp:            
  20.             yield [a-tmp,maxv[1]]
  21.         else:
  22.             yield [0,a+b]

  23. n=0
  24. from collections import deque
  25. res =[]
  26. def findway(ways):        
  27.     global n  #多少种方法            
  28.     for state in nextstate(ways[-1]):        #遍历下一状态(ways[-1]表示最后一个状态)
  29.         if state not in ways:         #当前状态未出现过。
  30.             ways.append(state)    #添加新结果
  31.             if state[0] == 2 or state[1]==2:
  32.                 n+=1               
  33.                 print('第%d种,共%d步:' %(n,len(ways)),ways)    #输出结果               
  34.                 res.append(deque(ways))
  35.             else:
  36.                 findway(ways)  #递归搜索
  37.             ways.pop()   #去除当前循环中添加的状态(回归上一级,搜索另一支线。)
  38.    

  39. findway([state0])
  40. bestway=sorted(res,key=lambda x:len(x))[0]
  41. print("最佳路径(共"+str(len(bestway))+"步):")
  42. for x in bestway:
  43.     print(x)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-15 16:35:23 | 显示全部楼层
改一下,不超过30行代码。。。。。。
  1. state0 = [0,0]   #勺子的初始状态
  2. maxv = [7,11]    #每个勺子的对应的容积
  3. def nextstate(state0):    #对于状态state0,推出所有可能的下一状态
  4.     a,b=state0[0],state0[1]
  5.     res=[(0,b),(a,0),(maxv[0],b),(a,maxv[1])]    #清空,加满        
  6.     delta=maxv[0]-a if b>=maxv[0]-a else b   #b-->a
  7.     res.append((a+delta,b-delta))
  8.     delta=maxv[1]-b if a>=maxv[1]-b else a   #a-->b
  9.     res.append((a-delta,b+delta))        
  10.     res=list(set(res))
  11.     if (a,b) in res:
  12.         res.remove((a,b))
  13.     return res

  14. from collections import deque
  15. res =[]
  16. def findway(ways):            
  17.     for state in nextstate(ways[-1]):        #遍历下一状态(ways[-1]表示最后一个状态)
  18.         if state not in ways:         #当前状态未出现过。
  19.             ways.append(state)    #添加新结果
  20.             if state[0] == 2 or state[1]==2:               
  21.                 res.append(deque(ways))
  22.             else:
  23.                 findway(ways)  #递归搜索
  24.             ways.pop()   #去除当前循环中添加的状态(回归上一级,搜索另一支线。)   

  25. findway([state0])
  26. bestway=sorted(res,key=lambda x:len(x))[0]
  27. print("最佳路径(共"+str(len(bestway))+"步):",[x for x in bestway])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-10-22 19:45:15 | 显示全部楼层
学习虚席
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-1 20:21:52 | 显示全部楼层
WOZHISHIWEILEANDAN
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-28 11:07:01 | 显示全部楼层
不懂得东西,来学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-28 14:35:28 | 显示全部楼层
算法不会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-28 20:48:29 | 显示全部楼层
kankan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-29 08:22:29 | 显示全部楼层

我只是为了看答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-29 11:21:11 | 显示全部楼层
探究下代码中的秘密
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-12 10:19:41 | 显示全部楼层
nihao
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-4-12 11:30:56 From FishC Mobile | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-11-18 15:13:58 | 显示全部楼层
看看答案,最近有点不太会
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-11-27 15:55:57 | 显示全部楼层
da
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-4 23:58:43 | 显示全部楼层
标记
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-9 21:30:41 | 显示全部楼层
KKK
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-26 16:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表