标签:箱子 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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。