鱼C论坛

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

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

[复制链接]
发表于 2017-5-27 14:52:43 | 显示全部楼层
BFS算法的Python实现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-12 17:59:28 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-6-12 20:39:28 | 显示全部楼层
学习学习 看看代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-15 21:08:11 | 显示全部楼层
本帖最后由 WelanceLee 于 2017-6-15 21:10 编辑
def xdd(arr, r):
    if r not in arr:
        arr.append(r)
        action[r] = arr[index]
    return arr

start = (0, 0)
queue = [start]
action = {}
index = 0
while True:
    q = queue[index]
    if q[0] == 2 or q[1] == 2:
        break
    xdd(queue, (7, q[1]))
    xdd(queue, (0, q[1]))
    xdd(queue, (q[0], 0))
    xdd(queue, (q[0], 11))
    x = q[0] + q[1]
    if x <= 7:
        xdd(queue, (x, 0))
        xdd(queue, (0, x))
    if 7 < x < 11:
        xdd(queue, (7, x - 7))
        xdd(queue, (0, x))
    if x >= 11:
        xdd(queue, (x - 11, 11))
        xdd(queue, (7, x - 7))
    index += 1

solution = [(0,0)]
while q != (0, 0):
    solution.insert(1, q)
    q = action[q]

for each in solution:
    print(each)
    
没用pop,直接在queue里面看状态是不是走过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2017-6-26 09:43:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-7-3 23:16:48 From FishC Mobile | 显示全部楼层
来看下程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 22:00:07 | 显示全部楼层
学习下BFS 搞不懂头疼极了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-22 14:04:19 | 显示全部楼层
1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-20 02:37:28 | 显示全部楼层
感谢分享,真需要
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-20 15:08:05 | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-10-22 22:18:12 | 显示全部楼层
求答案~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-23 10:36:02 | 显示全部楼层
采用迭代判断进行计算吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-24 21:01:12 | 显示全部楼层
上酒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-21 10:11:00 | 显示全部楼层
学习学习!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-11 10:51:28 | 显示全部楼层
回复看源码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-9 17:58:55 | 显示全部楼层
nice
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-16 15:57:49 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-3 13:17:20 | 显示全部楼层
这个题确实想不出广度探索法的需求,因为我试了一下都是直线型的思路,所以:
m,n = 7,11
visit = []

def move(a,b,m,n):
    
    if a == 0:
        if b == 0:
            a += m
        elif b != 0 and b != n:
            a += m
        else:
            return None
        
    elif a == m:
        if b == 0:
            t = n-b
            if t <= a:
                a -= t
                b += t
            else:
                b += a
                a = 0
                
        elif b != 0 and b != n:
            t = n-b
            if t <= a:
                a -= t
                b +=t 
            elif t > a:
                b += a
                a = 0

    elif a != 0 and a != m:
        if b == n:
            b=0
        elif b == 0:
            t = (n-b)
            if t <= a:
                a -= t
                b +=t 
            elif t > a:
                b += a
                a = 0

    
    print(a,b)
    return a,b
a,b,c = 0,0,1
a1,b1,c1 =0,0,1
while c:
    (a,b) = move(a,b,7,11)
    if a ==2 or b ==2:
        print('用了%d步'%c)
        break
    c += 1
while c1:
    (a1,b1) = move(a1,b1,11,7)
    if a1 ==2 or b1 ==2:
        print('用了%d步'%c1)
        break
    c1 += 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-12 11:34:45 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-24 14:48:37 | 显示全部楼层
后来还开了个v客户管理客户
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-16 08:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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