鱼C论坛

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

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

[复制链接]
发表于 2017-5-27 14:52:43 | 显示全部楼层
BFS算法的Python实现
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-6-12 17:59:28 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-12 20:39:28 | 显示全部楼层
学习学习 看看代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  6. start = (0, 0)
  7. queue = [start]
  8. action = {}
  9. index = 0
  10. while True:
  11.     q = queue[index]
  12.     if q[0] == 2 or q[1] == 2:
  13.         break
  14.     xdd(queue, (7, q[1]))
  15.     xdd(queue, (0, q[1]))
  16.     xdd(queue, (q[0], 0))
  17.     xdd(queue, (q[0], 11))
  18.     x = q[0] + q[1]
  19.     if x <= 7:
  20.         xdd(queue, (x, 0))
  21.         xdd(queue, (0, x))
  22.     if 7 < x < 11:
  23.         xdd(queue, (7, x - 7))
  24.         xdd(queue, (0, x))
  25.     if x >= 11:
  26.         xdd(queue, (x - 11, 11))
  27.         xdd(queue, (7, x - 7))
  28.     index += 1

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

  33. for each in solution:
  34.     print(each)
  35.    
复制代码

没用pop,直接在queue里面看状态是不是走过
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2017-6-26 09:43:28 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-7-3 23:16:48 From FishC Mobile | 显示全部楼层
来看下程序
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-19 22:00:07 | 显示全部楼层
学习下BFS 搞不懂头疼极了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-8-22 14:04:19 | 显示全部楼层
1
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-20 02:37:28 | 显示全部楼层
感谢分享,真需要
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-20 15:08:05 | 显示全部楼层
学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-10-22 22:18:12 | 显示全部楼层
求答案~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-23 10:36:02 | 显示全部楼层
采用迭代判断进行计算吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-10-24 21:01:12 | 显示全部楼层
上酒
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-11-21 10:11:00 | 显示全部楼层
学习学习!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-12-11 10:51:28 | 显示全部楼层
回复看源码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-9 17:58:55 | 显示全部楼层
nice
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-1-16 15:57:49 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  3. def move(a,b,m,n):
  4.    
  5.     if a == 0:
  6.         if b == 0:
  7.             a += m
  8.         elif b != 0 and b != n:
  9.             a += m
  10.         else:
  11.             return None
  12.         
  13.     elif a == m:
  14.         if b == 0:
  15.             t = n-b
  16.             if t <= a:
  17.                 a -= t
  18.                 b += t
  19.             else:
  20.                 b += a
  21.                 a = 0
  22.                
  23.         elif b != 0 and b != n:
  24.             t = n-b
  25.             if t <= a:
  26.                 a -= t
  27.                 b +=t
  28.             elif t > a:
  29.                 b += a
  30.                 a = 0

  31.     elif a != 0 and a != m:
  32.         if b == n:
  33.             b=0
  34.         elif b == 0:
  35.             t = (n-b)
  36.             if t <= a:
  37.                 a -= t
  38.                 b +=t
  39.             elif t > a:
  40.                 b += a
  41.                 a = 0

  42.    
  43.     print(a,b)
  44.     return a,b
  45. a,b,c = 0,0,1
  46. a1,b1,c1 =0,0,1
  47. while c:
  48.     (a,b) = move(a,b,7,11)
  49.     if a ==2 or b ==2:
  50.         print('用了%d步'%c)
  51.         break
  52.     c += 1
  53. while c1:
  54.     (a1,b1) = move(a1,b1,11,7)
  55.     if a1 ==2 or b1 ==2:
  56.         print('用了%d步'%c1)
  57.         break
  58.     c1 += 1
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-12 11:34:45 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-3-24 14:48:37 | 显示全部楼层
后来还开了个v客户管理客户
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 00:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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