成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python實(shí)現(xiàn)隨機(jī)生成迷宮并自動(dòng)尋路

瀏覽:3日期:2022-06-17 08:04:37
目錄Python深搜版:Python 廣搜版lua版:Python深搜版:

核心在于帶隨機(jī)的深搜(見(jiàn)代碼第23到27行,其實(shí)也可以用22行代替這幾行代碼,你可以試著把第24行的數(shù)字4改大或者改小,即調(diào)整隨機(jī)程度)

import osimport randomfrom queue import Queueimport numpyimport coloramafrom colorama import Fore, Back, Styleimport sys from bmpEditor import bmpcolorama.init()# numpy.random.seed(1)_xy = [0,2,0,-2,0]size = 31sys.setrecursionlimit(100000000)road = set()def dfs(curr_pos):road.add(curr_pos)# for i in numpy.random.permutation(4):p = [0,1,2,3]for i in range(4):l = random.randint(0,3)r = random.randint(0,3)p[l], p[r] = p[r], p[l]for i in p:next_pos = (curr_pos[0] + _xy[i], curr_pos[1] + _xy[i+1])if (0<=next_pos[0]<size and0<=next_pos[1]<size andnext_pos not in road ):road.add(((curr_pos[0] + next_pos[0])/2, (curr_pos[1] + next_pos[1])/2))dfs(next_pos)dfs((0,0))q = Queue()q.put((0,0))ans_road = set()def dfs_getans(curr_pos):# print(curr_pos)ans_road.add(curr_pos)if (size-1, size-1) in ans_road:returnfor i in range(4):next_pos = (curr_pos[0] + _xy[i]//2, curr_pos[1] + _xy[i+1]//2)if (0<=next_pos[0]<size and0<=next_pos[1]<size andnext_pos in road andnext_pos not in ans_road and(size-1, size-1) not in ans_road):dfs_getans(next_pos)if (size-1, size-1) not in ans_road:ans_road.remove(curr_pos)dfs_getans((0,0))for i in range(size):for j in range(size):print((Back.WHITE + ’ ’) if (i,j) in road else (Back.BLACK + ’ ’), end=’ ’)print()wall_width = 2cell_size = 6image = bmp((size+3)*cell_size-wall_width, (size+3)*cell_size-wall_width, 0x000000)for i in range(size+3):for j in range(size+3):if (i-1, j-1) in road:image.paint_rect(i*cell_size, j*cell_size, cell_size*2-wall_width, cell_size*2-wall_width, 0xffffff)file_name = '%dmaze.bmp'%sizeimage.save_image(file_name)os.system(file_name)for p in ans_road:# image.paint_rect(p[0]+1, p[1]+1)image.paint_rect((p[0]+1)*cell_size + (cell_size - wall_width)//2,(p[1]+1)*cell_size + (cell_size - wall_width)//2,cell_size, cell_size,0xff0000)file_name = '%dans.bmp'%sizeimage.save_image(file_name)os.system(file_name)

效果

3131:

Python實(shí)現(xiàn)隨機(jī)生成迷宮并自動(dòng)尋路

Python實(shí)現(xiàn)隨機(jī)生成迷宮并自動(dòng)尋路

8181:

Python實(shí)現(xiàn)隨機(jī)生成迷宮并自動(dòng)尋路

Python實(shí)現(xiàn)隨機(jī)生成迷宮并自動(dòng)尋路

坐標(biāo)系有翻轉(zhuǎn),控制臺(tái)中的左上角對(duì)應(yīng)圖片中的左下角

其中bmpEditor不是官方庫(kù),代碼地址(文件名為bmpEditor.py,和這以上代碼放同一個(gè)路徑下即可)

Python 廣搜版

在隊(duì)列的基礎(chǔ)上把隊(duì)列中的元素順序打亂(第24行)

import osimport randomfrom queue import Queueimport numpyimport coloramafrom colorama import Fore, Back, Styleimport sys import random from bmpEditor import bmpcolorama.init()numpy.random.seed(1)_xy = [0,2,0,-2,0]size = 59sys.setrecursionlimit(size*size//4+size)q = []q.append((0,0))road = set()road.add((0,0))while len(q) != 0:random.shuffle(q)curr_pos = q.pop()# print(curr_pos)for i in range(4):next_pos = (curr_pos[0] + _xy[i], curr_pos[1] + _xy[i+1])if (0<=next_pos[0]<size and0<=next_pos[1]<size andnext_pos not in road ):road.add( ((curr_pos[0] + next_pos[0])//2, (curr_pos[1] + next_pos[1])//2) )q.append(next_pos)road.add(next_pos)ans_road = set()def dfs_getans(curr_pos):ans_road.add(curr_pos)if (size-1, size-1) in ans_road:returnfor i in range(4):next_pos = (curr_pos[0] + _xy[i]//2, curr_pos[1] + _xy[i+1]//2)if (0<=next_pos[0]<size and0<=next_pos[1]<size andnext_pos in road andnext_pos not in ans_road and(size-1, size-1) not in ans_road):dfs_getans(next_pos)if (size-1, size-1) not in ans_road:ans_road.remove(curr_pos)dfs_getans((0,0))print(len(ans_road))for i in range(0, size):for j in range(0, size):print((Back.WHITE + ’ ’) if (i,j) in road else (Back.BLACK + ’ ’), end=’ ’)print()wall_width = 1cell_size = 5image = bmp((size+3)*cell_size-wall_width, (size+3)*cell_size-wall_width, 0x000000)for i in range(size+3):for j in range(size+3):if (i-1, j-1) in road:image.paint_rect(i*cell_size, j*cell_size, cell_size*2-wall_width, cell_size*2-wall_width, 0xffffff)file_name = '%dmaze.bmp'%sizeimage.save_image(file_name)os.system(file_name)for p in ans_road:# image.paint_rect(p[0]+1, p[1]+1)image.paint_rect((p[0]+1)*cell_size + (cell_size - wall_width)//2,(p[1]+1)*cell_size + (cell_size - wall_width)//2,cell_size, cell_size,0xff0000)file_name = '%dans.bmp'%sizeimage.save_image(file_name)os.system(file_name)

效果:

Python實(shí)現(xiàn)隨機(jī)生成迷宮并自動(dòng)尋路

Python實(shí)現(xiàn)隨機(jī)生成迷宮并自動(dòng)尋路

相比深度優(yōu)先的,這種迷宮會(huì)更加“直”一些

lua版:

大體上是深搜,加了一定的隨機(jī)性使得搜索過(guò)程中有一定概率暫時(shí)放棄當(dāng)前路徑。見(jiàn)表stop_points,(第7行、第74行及其后面的repeat循環(huán))

local _xy = {0,2,0,-2,0}local size = 41local base = size+1local road = {}stop_points = {}function dfs(curr_x, curr_y)road[curr_x*base+curr_y] = trueif math.random(1,10) <= 3 thenstop_points[curr_x*base+curr_y] = truereturnend-- os.execute('cls')-- print_map()local permutation = {1,2,3,4}for i=1, 4 dolocal l = math.random(1,4)local r = math.random(1,4)permutation[l], permutation[r] = permutation[r], permutation[l]endfor i=1, 4 dolocal next_x = curr_x+_xy[permutation[i]]local next_y = curr_y+_xy[permutation[i]+1]if next_x>=1 and next_x<=size andnext_y>=1 and next_y<=size androad[next_x*base+next_y] == nil thenlocal mid_x = math.floor((curr_x+next_x)/2)local mid_y = math.floor((curr_y+next_y)/2)road[mid_x*base+mid_y] = truedfs(next_x, next_y)endendendlocal ans_geted = falselocal parent = {}function get_ans(curr_x, curr_y)-- print(curr_x, curr_y)for i=1, 4 donext_x = (curr_x + math.floor(_xy[i])/2 )next_y = (curr_y + math.floor(_xy[i+1])/2 )-- print(next_x, next_y)if next_x >= 1 and next_x <= size andnext_y >= 1 and next_y <= size androad[next_x*base+next_y] andparent[next_x*base+next_y]==nilthenparent[next_x*base+next_y] = curr_x*base+curr_yget_ans(next_x, next_y)endendendlocal ans_road = {}function print_map()for i=0, size+1 dolocal line = ''for j=0, size+1 doif ans_road [i*base+j] thenline = line..'..'elseif road[i*base+j]==true thenline = line..' 'elseline = line..'HH'endendprint(line)endendstop_points[1*base+1] = true-- create mazerepeatlocal has_point = falsefor v,_ in pairs(stop_points) dohas_point = truestop_points[v] = nildfs(math.floor(v/base), v%base)breakend-- print(has_point)until not has_pointget_ans(1,1)parent[1*base+1] = nilprint('')-- for k,v in pairs(parent) do-- print(string.format('[%d,%d]->[%d,%d]', math.floor(k/base), k%base, math.floor(v/base), v%base))-- endprint('')local x = sizelocal y = sizerepeat-- print(x,y)ans_road[x*base+y] = truelocal v = parent[x*base+y]x = math.floor(v/base)y = v%baseuntil --[[(x==1 and y== 1)]] not parent[x*base+y]ans_road[1*base+1] = trueprint_map()

效果:

4141:

Python實(shí)現(xiàn)隨機(jī)生成迷宮并自動(dòng)尋路

8989

Python實(shí)現(xiàn)隨機(jī)生成迷宮并自動(dòng)尋路

到此這篇關(guān)于Python實(shí)現(xiàn)隨機(jī)生成迷宮并自動(dòng)尋路的文章就介紹到這了,更多相關(guān)Python生成迷宮并自動(dòng)尋路內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Python 編程
相關(guān)文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
一区二区三区成人精品| 亚洲国产美国国产综合一区二区| 亚洲精品视频免费看| 欧美1区2区3区| 欧美变态tickling挠脚心| 国产综合久久久久久鬼色 | 亚洲欧美视频一区二区三区| 中文字幕日韩一区| 欧美日韩在线不卡一区| 日本一区二区免费在线| 99视频有精品| 欧美一区二区三区婷婷月色| 国产一区二区三区不卡在线观看| 欧美人与z0zoxxxx视频| 韩国中文字幕2020精品| 欧美高清激情brazzers| 国产成人av电影在线| 91精品国产欧美日韩| 国产成人精品一区二区三区四区| 91精品国产麻豆| 成人美女视频在线观看| 久久婷婷成人综合色| 欧美ab在线视频| 中文字幕一区二区不卡| 国产精品日韩二区| 日韩国产在线一| 欧美丝袜丝交足nylons图片| 韩国精品久久久| 欧美成人国产一区二区| 91色婷婷久久久久合中文| 亚洲国产精华液网站w| 黄色一区三区| 亚洲一区二区在线免费观看视频 | 成人精品在线视频观看| 欧美大黄免费观看| 99久久精品国产一区| 国产精品入口麻豆原神| 国产精品午夜av在线| 美洲天堂一区二卡三卡四卡视频| 欧美色精品天天在线观看视频| 国产精品99久久久久久有的能看 | 欧美精品一区二区三区蜜桃 | 国产一区二区女| 欧美一区三区四区| aaa欧美色吧激情视频| 亚洲国产精品国自产拍av| 1024成人| 免费一区二区视频| 91精品国产aⅴ一区二区| 99re成人精品视频| 亚洲日本va午夜在线电影| 亚洲欧美国产不卡| 久久精品99久久久| 2023国产精品| 亚洲欧洲午夜| 日本在线不卡一区| 精品日韩在线观看| 尤妮丝一区二区裸体视频| 午夜精品视频一区| 欧美日韩dvd在线观看| 99久久久久免费精品国产| 中文字幕一区二区三区四区不卡| 美女国产精品| 欧美亚洲动漫另类| av高清久久久| 亚洲免费电影在线| 欧美日韩国产色站一区二区三区| 99精品热视频| 亚洲成人免费视频| 欧美mv日韩mv| 中文亚洲欧美| 国产精品一区二区免费不卡| 国产精品理论片在线观看| 久久精品99| 99视频精品全部免费在线| 亚洲一区二区成人在线观看| 欧美精品丝袜久久久中文字幕| 91麻豆成人久久精品二区三区| 亚洲一二三区在线观看| 91麻豆精品91久久久久久清纯| 国模吧视频一区| 久久精品国产亚洲aⅴ| 国产欧美一区二区精品性色| 蜜桃伊人久久| 国产精品久久久久aaaa| 精品视频免费看| 好看不卡的中文字幕| 青青草原综合久久大伊人精品优势 | 日韩国产精品久久久久久亚洲| 欧美va亚洲va国产综合| 国产精品久久一区二区三区| 成人性视频网站| 亚洲午夜国产一区99re久久| 日韩一本二本av| 亚洲综合日韩| 91免费在线视频观看| 久久精品国产999大香线蕉| 成人免费一区二区三区在线观看| 欧美日韩免费一区二区三区视频| 黄色成人av网站| 精品一区二区三区的国产在线播放| 国内不卡一区二区三区| 国产原创一区二区| 一区二区三区欧美视频| 欧美第一区第二区| 色狠狠一区二区三区香蕉| 欧美激情一区| 国产成a人亚洲精品| 视频一区视频二区中文字幕| 日本一区二区三区dvd视频在线| 欧美高清精品3d| 香港久久久电影| 国产主播一区二区三区四区| 国产成人免费视频| 日韩影院精彩在线| 成人欧美一区二区三区在线播放| 欧美mv和日韩mv国产网站| 欧美丝袜丝交足nylons图片| 亚洲黄色大片| 国产91精品精华液一区二区三区| 图片区小说区国产精品视频| 日本一区二区三区dvd视频在线| 欧美一级精品大片| 欧美最猛性xxxxx直播| 亚洲深夜影院| 欧美精品一区在线发布| 国产精品一区专区| 日韩电影在线免费| 一区二区三区四区在线免费观看| 国产日韩在线不卡| 欧美一区二区免费观在线| 欧亚一区二区三区| 色老综合老女人久久久| 亚洲激情网址| 欧美理论在线| 97久久精品人人做人人爽50路| 韩国毛片一区二区三区| 调教+趴+乳夹+国产+精品| 成人免费在线视频| 久久精品一级爱片| 精品美女被调教视频大全网站| 欧美精品一二三区| 欧美综合天天夜夜久久| 久久亚洲午夜电影| 美女尤物久久精品| 国产精品毛片| 中文久久精品| 国产日韩高清一区二区三区在线| 欧美ab在线视频| 波多野结衣中文字幕一区二区三区| 久久精品二区亚洲w码| 日韩精品每日更新| 午夜国产精品一区| 亚洲电影你懂得| 亚洲在线中文字幕| 亚洲精品国产视频| 亚洲精品欧美激情| 亚洲男同性恋视频| 一区二区中文字幕在线| 国产精品免费网站在线观看| 国产欧美日韩亚州综合| 国产日产欧美一区| 国产三级三级三级精品8ⅰ区| 精品少妇一区二区三区视频免付费| 日韩一区二区在线观看视频| 欧美一区二区在线观看| 91麻豆精品国产自产在线| 欧美电影影音先锋| 在线综合视频播放| 日韩一级二级三级| 日韩精品专区在线| 欧美v国产在线一区二区三区| 日韩欧美一区在线观看| 欧美精品一区二区在线观看| 久久久久久久性| 国产精品美女久久久久aⅴ国产馆| 国产目拍亚洲精品99久久精品| 国产视频一区二区三区在线观看| 国产婷婷色一区二区三区 | 91精品中文字幕一区二区三区| 欧美日本精品一区二区三区| 69久久99精品久久久久婷婷 | 国产麻豆91精品| 丁香六月久久综合狠狠色| www.色精品| 欧美日韩网址| 亚洲二区视频| 国产精品乱子乱xxxx| 久久精品电影| 欧美日韩激情在线| 日韩精品一区在线| 久久久久久久电影| 国产精品久久久久aaaa樱花 | 日韩高清不卡一区二区三区| 毛片av一区二区| 精品一区二区三区视频在线观看| 国产传媒欧美日韩成人| 99视频精品免费视频| 国产精品多人| 国产日韩欧美一区二区|