鱼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 | 显示全部楼层
state0 = [0,0]   #勺子的初始状态
maxv = [7,11]    #每个勺子的对应的容积
def nextstate(state0):    #对于状态state0,推出所有可能的下一状态
    a,b=state0[0],state0[1]    
    if a>0:   #倒空某个勺子
        yield [0,b]
    if b>0:
        yield [a,0]

    if a<maxv[0]:
        yield [maxv[0],b]  #从酒缸里装满某个勺子
        tmp=maxv[0]-a   #差值
        if b>=tmp:            
            yield [maxv[0],b-tmp]
        else:
            yield [a+b,0]

    if b<maxv[1]:
        yield [a,maxv[1]]    
        tmp=maxv[1]-b   #差值
        if a>=tmp:            
            yield [a-tmp,maxv[1]]
        else:
            yield [0,a+b]
 
n=0
from collections import deque
res =[]
def findway(ways):        
    global n  #多少种方法            
    for state in nextstate(ways[-1]):        #遍历下一状态(ways[-1]表示最后一个状态)
        if state not in ways:         #当前状态未出现过。
            ways.append(state)    #添加新结果
            if state[0] == 2 or state[1]==2:
                n+=1                
                print('第%d种,共%d步:' %(n,len(ways)),ways)    #输出结果                
                res.append(deque(ways))
            else:
                findway(ways)  #递归搜索
            ways.pop()   #去除当前循环中添加的状态(回归上一级,搜索另一支线。)
    

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

使用道具 举报

发表于 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])
想知道小甲鱼最近在做啥?请访问 -> 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, 2025-1-16 08:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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