ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

用python写的推箱子搜索程序

2021-11-29 14:01:30  阅读:131  来源: 互联网

标签:箱子 return .. python WWWW 搜索 dx dy def


 1 # -*- coding: gbk -*-
 2 from functools import reduce
 3 from copy import deepcopy
 4 import re
 5 def s(l): return reduce(lambda x,y:x+y, l, '')
 6 class Brd:
 7     def __init__(m, s):
 8         m.x = m.y = -1; m.b = []
 9         b = [x for x in re.split('[\r|\n]', s.upper()) if x != '']
10         for y in range(len(b)):
11             x = b[y].find('?')
12             if x != -1: (m.x, m.y) = (x, y)
13             m.b.append(list(b[y]))
14     def __str__(m): return reduce(lambda x,y:s(x)+'\n'+s(y), m.b, '')
15     def equal(m, bstr):
16         m.b[m.y][m.x] = '.'; eq = str(m) == bstr; m.b[m.y][m.x] = '?'
17         return eq
18 start = Brd('''
19   WWWWWW
20   W....W
21 WWWBBB.W
22 W?.B...W
23 W.B...WW
24 WWWW..W 
25    WWWW 
26 ''')
27 start = Brd('''
28   WWWWWW
29   W....W
30 WWW..B.W
31 W..B...W
32 W?.BBBWW
33 WWWW..W 
34    WWWW 
35 ''')
36 target = str(Brd('''
37   WWWWWW
38   W....W
39 WWW....W
40 W...BB.W
41 W..BBBWW
42 WWWW..W 
43    WWWW 
44 '''))
45 tried = {}
46 def step(b, dx, dy):
47     if b.b[b.y+dy][b.x+dx] == 'W': return None
48     b = deepcopy(b); c = b.b; x = b.x; y = b.y
49     if c[y+dy][x+dx] == '.':
50         (c[y+dy][x+dx], c[y][x]) = ('?', '.')
51         (b.x, b.y) = (x+dx, y+dy)
52         return b
53     x2=dx*2; y2=dy*2 # 2*(dx,dy) = (dx,dy,dx,dy)
54     if c[y+y2][x+x2] == '.':
55         (c[y+y2][x+x2], c[y+dy][x+dx], c[y][x]) = ('B', '?', '.')
56         (b.x, b.y) = (x+dx, y+dy)
57         return b
58     return None
59 def search(brd, path):
60     if brd.equal(target):
61         for p in path: print(p)
62         return True
63     s = str(brd)
64     if tried.get(s, False): return False
65     tried[s] = True
66     for (dx, dy) in [[-1,0],[1,0],[0,-1],[0,1]]:
67         t = step(brd, dx, dy)
68         if t == None: continue
69         if search(t, path+[t]): return True
70     return False
71 search(start, [start])

能用但贼慢。

 

标签:箱子,return,..,python,WWWW,搜索,dx,dy,def
来源: https://www.cnblogs.com/funwithwords/p/15619089.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有