亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

python實現(xiàn)推箱子游戲

2020-02-15 23:43:54
字體:
供稿:網(wǎng)友

本文實例為大家分享了python實現(xiàn)推箱子游戲的具體代碼,供大家參考,具體內(nèi)容如下

題目描述:

最短路徑為:

uurrDDDDuuuulldRurDDDrddLLrruLuuulldRurDDDrdL

u表示向上,d表示向下,l表示向左,r表示向右。

大寫表示人推著箱子一起動,小寫表示人自己走。

代碼用BFS實現(xiàn)。狀態(tài)要分推著箱子一起走和人單獨走,這兩種狀態(tài)轉(zhuǎn)移是不同的。

由于代碼中注釋較詳細,這里不過多解釋。

代碼:

# -*- coding: utf-8 -*-# @Time  : 2017/8/10 上午9:42# @Author : Qi MO# @File  : BFS.py# @Software: PyCharm Community Edition level_file_path = '../數(shù)據(jù)/level_file.txt' class GameShortest:  def __init__(self,line, col=10):    """    給一個圖,長度為100的字符串表示。    0空地 1墻 2箱子起始位置 3箱子終點位置 4人的起始位置    :param line: 地圖,用字符串表示。如代碼最后的每一行表示每一關(guān)的地圖。    :param col: 地圖的長寬,由于設(shè)定為10*10,默認為10    """     self.line = line    # sta和en 表示開始的狀態(tài),結(jié)束的狀態(tài)    # sta只有2,4,0 2表示箱子開始位置,4表示人的位置,0表示其他。    # en只有1,3,0 1表示墻,3表示箱子結(jié)束位置,0表示其他。    # 現(xiàn)在只需要把sta狀態(tài)中的2位置移動到en的3的位置即滿足條件    self.sta = ''    self.en = ''    self.col = col    # px, py表示4的位置    self.px,self.py = -1,-1    # paths記錄最短路徑(可能有多條)    self.paths = []    # len記錄最短路徑長度 如    self.len = -1     self.pre()    self.BFS()    print(self.paths)   def pre(self):    """    1.獲得sta開始狀態(tài)和en結(jié)束狀態(tài)    2.獲得人的起始位置px,py    代碼最后的第一關(guān)的地圖可視化為    1111111111    1111111111    1110001111    1110221111    1114201111    1111100111    1111300111    1113300111    1111111111    1111111111    :return:    """    mp = []    for pos in range(0, 100, 10):      mp.append(self.line[pos:pos + 10])    # print(self.line)    # for x in mp:    #   print(x)     for pos, enum in enumerate(self.line):      cx, cy = pos // 10, pos % 10      if enum == '4':        self.px, self.py = cx, cy    # 現(xiàn)在只需要把sta開始的狀態(tài)中的2位置移動到en的3的位置即滿足條件    staDic = {'0': '0', '1': '0', '2': '2', '3': '0', '4': '4'}    enDic = {'0': '0', '1': '1', '2': '0', '3': '3', '4': '0'}    for x in self.line:      self.sta += staDic[x]      self.en += enDic[x]    # print(self.sta)    # print(self.en)   def is_ok(self,sta):    """    sta狀態(tài)中的2位置移動到en的3的位置。    :param sta:    :return:    """    for s,e in zip(sta,self.en):      if e == '3' and s != '2':        return False    return True   def BFS(self):    """    BFS獲得最短路徑保存到paths中    :return:    """    # 4個方向,小寫代表只是人移動,大寫表示人推著箱子一起移動    dirs = [[-1,0,'u','U'],[1,0,'d','D'],[0,1,'r','R'],[0,-1,'l','L']]    # 把開始的狀態(tài)進入隊列(list模擬),狀態(tài)包括字符串表示的當(dāng)前狀態(tài)、當(dāng)前的路徑、當(dāng)前人的位置    states = [[self.sta,'',self.px,self.py]]    # 訪問數(shù)組(dict模擬),訪問過的狀態(tài)(字符串)不再訪問    visi = {}    visi[self.sta] = 1     s_len = 1000    while len(states)>0:      sta, path, px, py = states[0]      # 4狀態(tài)的位置      ppos = px*self.col + py      states = states[1:]      if len(path)>s_len:        break      # 保存最短路徑到paths中      if self.is_ok(sta):        if self.len == -1 or len(path) == self.len:          self.paths.append(path)          self.len = len(path)        continue       for dir in dirs:        cx, cy = px + dir[0], py + dir[1]        # 4挨著的狀態(tài)的位置        pos = cx*self.col+cy        nx, ny = px + 2*dir[0], py + 2*dir[1]        # 4挨著挨著的狀態(tài)的位置        npos = nx*self.col+ny        if not (nx>=0 and nx<self.col and ny>=0 and ny<self.col):          continue        # python中字符串不可更改,于是把字符串變成list更改狀態(tài)后再轉(zhuǎn)換為字符串        if sta[pos] == '2' and sta[npos] == '0' and self.en[npos] != '1':        # 人和箱子一起推動,sta中連著的狀態(tài)為4 2 0,en中第三個不能為1。推完之后sta變?yōu)? 4 2          digits = [int(x) for x in sta]          digits[ppos],digits[pos],digits[npos] = 0,4,2          new_sta = ''.join(str(x) for x in digits)          if new_sta not in visi:            visi[new_sta] = 1            states.append([new_sta, path+dir[3], cx, cy])        elif sta[pos] == '0' and self.en[pos] !='1':        # 人動箱子不動,sta中連著的狀態(tài)為4 0,en中第二個不能為1。          digits = [int(x) for x in sta]          digits[ppos], digits[pos] = 0, 4          new_sta = ''.join(str(x) for x in digits)          if new_sta not in visi:            visi[new_sta] = 1            states.append([new_sta, path + dir[2], cx, cy]) if __name__ == '__main__':  f = open(level_file_path, encoding='utf-8')  cnt = 0  while(1):    line = f.readline()    line = line.strip('/n')    if len(line)==0 :      break    gs = GameShortest(line) """level_file.txt中內(nèi)容:11111111111111111111111000111111102211111114201111111110011111113001111113300111111111111111111111111111111111104000000110000200111001101011100100101110010010111001011001110030000111111111111111111111111111111111111111111111111111111031111114002000111023002011111131111111111111111111111111111111111111111111111111111111111000111111102211111110133111111023011111100401111111111111111111111111111111111111111111111111111111111111111100000111112111001113030020111400100011111111111111111111111111111111111111111111111111111111111111111001111110000001111100122011114030031111111111111111111111111111111111111111111100400011100000001110011100111100110011110201301111000020111113111111111111111111111111111111111111111111111111111111111100111111100320001110131210111000000411111111111111111111111111111111111111111111111111111111111111110000011110011101111000202011100013341111111111111111111111111111111111111111111111111111111001111111100041111111010111113121001111320010111130002011111111111111111111111111111111111111111111000001111131103111110402011111001201111100100111111111111111111111111111111111111111111111111111111110000111111311201111023400111100100011110000111111111111111111111111111111111111111111111111111111111110011111102041111110200111113001011111300001111111111111111111111111111111111111111111111111111111143001111100000111110010211111001203111111101011111110001111111111111111111111111111111111111111111111111111110000111111020211111103342011111113001111111111111111111111111111111111111111111111111111111100011111002301111140323011111101201111110001111111111111111111111111111111111111111111111111111111110031111102010111110020011111031401111100001111111111111111111111111111111111111111111111111111111111110411111311001111033020111102120011110000111111111111111111111111111111111111111111111111111111110001111111003301111100112111111001001111120004111110011111111111111111111111111111111111111111111111100001111103032111110024001111111010111111100011111111111111111111111111111111每一關(guān)的最短路徑:['uurrDDDDuuuulldRurDDDrddLLrruLuuulldRurDDDrdL']['drrRRurDDDDDrdLLL']['rrdrUrrrdLLulDullldR']['lluRRdrUllluuurrDDuulldRurD']['urrrrdrruulullllDurrrrdrddllullLrrrdrruLLL']['uurrrrDulllddrrRuulDrdL']['drrdddrdLLLuLDlUUUluRRRRurDDD']['uullLLddrrUdlllluuRurDrRddrruuLLL']['lUlLLdlluururrrrDDrdLullldlluRRRRllluurrrrdD']['ddrddLLulLdlUrrrdrruuluulldDuurrddrddllLLrruLL']['luurrrdrdLLLrrrddlUruuulllldDrddlUUrrRdrU']['ddlluluRuurrrDrddlluLrdrruLLddlluU']['dddlluluuRDrruulDrdLLulDrDLurrrddlLL']['drrdDrrddllUUUUruLdrDldR', 'drrdDrrddllUUUUrDldRuuuL']['drruLLLuulldRurDurDD']['urRdddrrUULLulldRururrD']['uLrddlluluuRDrrruullDldRRdrUU']['dddlUllllddrUUddrrUruLLrrruulDrdLL']['llldlUUUluurDrrrDDrdLLLulUluRRlddrddlUUUluR']['ulldRurDrrddllUUluurrDLLdrddrruuLrddlluU']"""            
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
免费看日韩av| 色就是色亚洲色图| 欧美香蕉爽爽人人爽| 成人高清在线观看| 日本一区二区三区电影免费观看| 亚洲一区二区五区| 日本韩国一区二区三区视频| 久操手机在线视频| 色综合五月天导航| 国产精品久久久免费看| 亚洲视屏在线观看| 夜夜狠狠擅视频| 亚欧美一区二区三区| 亚洲v国产v欧美v久久久久久| 国产精品美女久久久免费| 亚洲精品久久久一区二区三区| 中文字幕第3页| 1pondo在线播放免费| 免费高清视频在线一区| 国产日产精品一区二区三区的介绍| 亚洲一区二区在线免费观看| 亚洲国产成人在线观看| 中国一区二区视频| 亚洲国产欧美日韩精品| 色视频免费在线观看| 成年美女黄网站色大片不卡| 三上悠亚久久精品| 中文字幕在线观看| 在线亚洲一区| 国产精品一 二 三| 日本中文字幕一级片| 日韩国产一区三区| 国内精品国产三级国产a久久| 国产欧美第一页| 亚洲视频日本| 制服.丝袜.亚洲.中文.综合懂色| 一本大道久久a久久精品| 91精品国产视频| 日本一级二级视频| 在线观看欧美日本| 国产精品一国产精品| 久久久亚洲成人| 欧美xxx在线| 最近中文字幕mv免费高清在线| 日韩三级视频中文字幕| 成年人视频网站| 中文在线资源天堂| 国产欧美一区二| 91精品国产高清久久久久久| 中文字幕日韩一区二区三区不卡| 在线观看日韩专区| 久久久久99精品| 一二区成人影院电影网| 国产综合精品视频| 免费看的黄色欧美网站| 色先锋资源久久综合| 国产精品视频26uuu| 在线播放国产一区| 亚洲国产精品成人| 欧美三级情趣内衣| 亚洲第一天堂| 性猛交xxxx乱大交孕妇印度| 国产性一乱一性一伧一色| 成人3d动漫网站| 夜夜狂射影院| 影音先锋久久| a级日韩大片| 国产老妇伦国产熟女老妇视频| 在线免费电影观看| 欧美综合视频| 国产十六处破外女视频| 三级亚洲高清视频| 精品欧美日韩精品| 日本不卡高清视频| 国产高清不卡一区| 成年女人毛片| 午夜精品久久久久久久爽| 国产精品视频在| 综合蜜桃精品| 久久人人爽人人爽爽久久| 五月天丁香激情| 久久久99国产精品免费| 亚洲色成人www永久网站| 老司机精品福利视频| 亚洲精品国产高清久久伦理二区| 亚洲福利视频免费观看| 桃色一区二区| 91精品亚洲一区在线观看| 亚洲国产精品中文| 美女网站视频黄色| 一道本视频在线观看| 欧美图片一区二区三区| 日本一区二区三区中文字幕| 国产精品五月天| 18禁裸乳无遮挡啪啪无码免费| 2014亚洲片线观看视频免费| 小h片在线观看| 女人高潮一级片| 国产麻豆精品theporn| 日本一级淫片色费放| 日本在线观看视频网站| www.黄在线观看| 朝桐光av在线一区二区三区| 国产91丝袜在线播放九色| 亚洲午夜电影在线| 五月婷婷色综合| 欧美日韩国产精品专区| xxxxx性欧美特大| 亚洲爽爆av| 日本特黄a级高清免费大片| 男生操女生视频在线观看| 欧美精品成人久久| 丝袜美腿亚洲一区二区图片| 上原亚衣av一区二区三区| 99国产超薄肉色丝袜交足的后果| 五月婷婷激情综合网| 少妇被躁爽到高潮无码文| 一本久久综合亚洲鲁鲁五月天| 日日躁夜夜躁人人揉av五月天| 蜜乳av一区二区三区| 欧美特级特黄aaaaaa在线看| 国产精品一区二区女厕厕| 成人h动漫精品| 久久激情五月激情| 亚洲国产成人精品久久久国产成人一区| 欧美日韩免费做爰大片| 久播影院第一理论片| 久久人人97超碰com| 国产精品免费久久久久影院| 国产成人三级在线播放| 8848hh四虎| 在线免费av电影| 女同毛片一区二区三区| 亚洲自拍偷拍二区| 中文字幕一区在线观看视频| 亚洲一区二区三区视频| 欧美一区二区三区视频在线观看| 国产视频欧美视频| 多野结衣av一区| www.性欧美| 国产精品精品国产| 豆花视频一区| 午夜色在线观看| 97精品国产福利一区二区三区| 91精品国产高清一区二区三密臀| 国产欧美中文字幕| 久久久国产视频91| 深田咏美在线x99av| 第一福利永久视频精品| 国产精品精品国产一区二区| 亚洲精品人成电影网| 一区二区三区在线播| 亚洲色图久久久| 青青草国产在线| 日韩一级二级三级精品视频| 亚洲成人先锋电影| 成人app下载| 久久久不卡影院| 国产精品一二三产区| 青青草在线播放| 黑色丝袜福利片av久久| 免费在线观看污视频| 免费**毛片在线| 国产精品无码电影| 人人爽香蕉精品| 国产精品久久久久久久小唯西川| 国产精品69久久久久水密桃| 麻豆精品蜜桃视频网站| 成人激情直播| 一区二区三区激情| 国产一区二区精品在线| 日本高清不卡一区二区三区视频| gogogo高清免费观看在线视频| 成人性生活免费看| 欧美一卡2卡3卡4卡| 国产精品无码专区av免费播放| 成年网站在线视频网站| 欧美亚洲丝袜传媒另类| 九色蝌蚪国产| 中文字幕在线视频区| www.成人在线.com| 欧洲在线视频一区| 99久久综合狠狠综合久久aⅴ| 国产伦久视频在线观看| 精品人妻午夜一区二区三区四区| 日本不卡一区| 国产精品女人毛片| 国精产品一区一区三区视频| 在线观看视频99| 伊是香蕉大人久久| 久久精品91久久香蕉加勒比| 椎名由奈jux491在线播放| 久久中文字幕二区| 国产一区亚洲二区三区| 一区二区三区中文字幕精品精品| 波多野结衣与黑人| 久久久久无码精品| 在线精品国产| 成年女人免费视频| 高清精品久久| 亚洲精品资源在线| 欧美日韩一区不卡| 久久色在线观看| 在线免费观看黄色av| 超碰人人人人人人人| 成人3d精品动漫精品一二三| 久青草视频在线观看| 欧洲亚洲精品久久久久| 亚洲精品一区二区三区新线路| 色婷婷av一区二区三区之一色屋| 视频一区二区欧美| 69久久夜色精品国产69| 激情不卡一区二区三区视频在线| 天堂中文在线看| 久久精品国产99久久6| 亚洲欧洲日产国产网站| 999精品视频一区二区三区| 丝袜诱惑一区二区| 欧美黑人一区| 亚洲 小说 欧美 激情 另类| 日韩中文字幕久久| 一区二区三区国产精华| 成年女人免费又黄又爽视频| 精品免费99久久| 国产精品人人人人| 精品国产一区二区三区四区精华| 苍井空张开腿实干12次| 中文字幕一区二区三区四| 欧美日韩色综合| 亚洲欧洲成人在线| 中国美女黄色一级片| 免费在线黄色影片| 亚洲人妖av一区二区| 免费全黄无遮挡裸体毛片| 国产综合在线观看| 久久精品视频日本| 男人操女人免费软件| 精品免费av| 中文字幕亚洲天堂| 无码人妻aⅴ一区二区三区日本| 欧美gay男男猛男无套| 正在播放亚洲一区| 国产真实乱人偷精品人妻| 国产婷婷精品av在线| 一区二区三区av电影| 卡通动漫亚洲综合| 精品免费国产一区二区三区四区| 99这里只有精品| 精品国产亚洲一区二区三区大结局| 可以在线观看的av| gogo大尺度成人免费视频| 日本视频免费| 成人观看网址| 国产专区视频| 日韩一区和二区| xxav国产精品美女主播| 亚洲国产精品日韩专区av有中文| 在线视频1卡二卡三卡| 精品中国亚洲| 性欧美欧美巨大69| 国产av人人夜夜澡人人爽麻豆| 日本伦理一区二区三区| 成人羞羞国产免费网站| 九色福利视频| 麻豆9191精品国产| 小小女视频网站色琼网站| 91精品国产综合久久精品| 美女视频在线免费| 一区视频二区视频| 日韩精品免费在线观看| 狠狠噜噜久久| 国产精品美女主播在线观看纯欲| 五月婷婷婷婷婷| 国内精品久久久久久影视8| 欧美不卡激情三级在线观看| 91蜜桃网站免费观看| 日韩一区二区三区免费| 日韩亚洲在线| 1区2区3区在线视频| 国产成人aa在线观看网站站| 高h震动喷水双性1v1| 亚洲电影一区二区| 97视频在线观看网址| 国产国语亲子伦亲子| 精品日韩av| 日本午夜精品电影| 日本影音先锋电影| 日韩欧美不卡视频| 久草资源站在线观看| 韩国美女主播一区| 日日夜夜免费精品视频| 伊人色综合久久天天| 国产成人极品视频| 免费三片60分钟| 亚洲第一成年免费网站| 丁香一区二区三区| a视频免费观看| 午夜欧美不卡精品aaaaa| 午夜精品福利一区二区三区蜜桃| 精品久久久久久久| 手机免费看av片| www.在线播放| 阿v天堂2018| 超碰影院在线观看| 狠狠干狠狠搞| 综合蜜桃精品| 久草视频手机在线观看| 黄色直播在线| 国产特级aaaaaa大片| 久久精品国产99国产| 人人狠狠综合久久亚洲婷婷| 日本在线播放一二三区| 久久久999| 51色欧美片视频在线观看| 亚洲欧美一级| 丁香婷婷激情| 成人免费看片网址| 99精品欧美一区二区三区小说| 中文字幕在线影视资源| 美女91在线看| 最新亚洲国产| 草民电影神马电影一区二区| 国产电影一区二区三区| 91成人免费观看网站| 欧美日韩精品综合| 国产一级片一区二区| 中文字幕 欧美 日韩| 成人欧美一区二区三区黑人孕妇|