婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python實現隨機生成迷宮并自動尋路

Python實現隨機生成迷宮并自動尋路

熱門標簽:ai電銷機器人的優勢 騰訊地圖標注沒法顯示 地圖標注自己和別人標注區別 孝感營銷電話機器人效果怎么樣 聊城語音外呼系統 打電話機器人營銷 商家地圖標注海報 南陽打電話機器人 海外網吧地圖標注注冊

Python深搜版:

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

import os
import random
from queue import Queue
import numpy
import colorama
from colorama import Fore, Back, Style
import sys   

from bmpEditor import bmp

colorama.init()


# numpy.random.seed(1)
_xy = [0,2,0,-2,0]
size = 31
sys.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 and
			0=next_pos[1]size and
			next_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:
		return
	for 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 and
			0=next_pos[1]size and
			next_pos in road and
			next_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 = 2
cell_size = 6
image = 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"%size
image.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"%size
image.save_image(file_name)
os.system(file_name)

效果

3131:



8181:


坐標系有翻轉,控制臺中的左上角對應圖片中的左下角

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

Python 廣搜版

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

import os
import random
from queue import Queue
import numpy
import colorama
from colorama import Fore, Back, Style
import sys   
import random   

from bmpEditor import bmp
colorama.init()


numpy.random.seed(1)
_xy = [0,2,0,-2,0]
size = 59
sys.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 and
				0=next_pos[1]size and
				next_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:
		return
	for 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 and
				0=next_pos[1]size and
				next_pos in road and
				next_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 = 1
cell_size = 5
image = 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"%size
image.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"%size
image.save_image(file_name)
os.system(file_name)

效果:



相比深度優先的,這種迷宮會更加“直”一些

lua版:

大體上是深搜,加了一定的隨機性使得搜索過程中有一定概率暫時放棄當前路徑。見表stop_points,(第7行、第74行及其后面的repeat循環)

local _xy = {0,2,0,-2,0}
local size = 41
local base = size+1
local road = {}

stop_points = {}
function dfs(curr_x, curr_y)
	road[curr_x*base+curr_y] = true
	if math.random(1,10) = 3 then
		stop_points[curr_x*base+curr_y] = true
		return
	end
	-- os.execute("cls")
	-- print_map()
	local permutation = {1,2,3,4}
	for i=1, 4 do
		local l = math.random(1,4)
		local r = math.random(1,4)
		permutation[l], permutation[r] = permutation[r], permutation[l]
	end

	for i=1, 4 do
		local next_x = curr_x+_xy[permutation[i]]
		local next_y = curr_y+_xy[permutation[i]+1]
		if  next_x>=1 and next_x=size and
			next_y>=1 and next_y=size and
			road[next_x*base+next_y] == nil then

			local 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] = true
			dfs(next_x, next_y)
		end
	end
end

local ans_geted = false
local parent = {}
function get_ans(curr_x, curr_y)
	-- print(curr_x, curr_y)
	for i=1, 4 do
		next_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 and
			next_y >= 1 and next_y = size and
			road[next_x*base+next_y] and
			parent[next_x*base+next_y]==nil
		then
			parent[next_x*base+next_y] = curr_x*base+curr_y
			get_ans(next_x, next_y)
		end
	end

end

local ans_road = {}
function print_map()
	for i=0, size+1 do
		local line = ""
		for j=0, size+1 do
			if ans_road [i*base+j] then
				line = line..".."
			elseif road[i*base+j]==true then
				line = line.."  "
			else
				line = line.."HH"
			end
		end
		print(line)
	end
end

stop_points[1*base+1] = true

-- create maze
repeat
	local has_point = false
	for v,_ in pairs(stop_points) do
		has_point = true
		stop_points[v] = nil
		dfs(math.floor(v/base), v%base)
		break
	end
	-- print(has_point)
until not has_point


get_ans(1,1)
parent[1*base+1] = nil
print("")
-- 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))
-- end
print("")
local x = size
local y = size
repeat
	-- print(x,y)
	ans_road[x*base+y] = true
	local v = parent[x*base+y]
	x = math.floor(v/base)
	y = v%base
until --[[(x==1 and y== 1)]] not parent[x*base+y]
ans_road[1*base+1] = true

print_map()

效果:

4141:


8989

到此這篇關于Python實現隨機生成迷宮并自動尋路的文章就介紹到這了,更多相關Python生成迷宮并自動尋路內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Javascript結合Vue實現對任意迷宮圖片的自動尋路
  • C++ DFS算法實現走迷宮自動尋路
  • PHP樹的深度編歷生成迷宮及A*自動尋路算法實例分析

標簽:牡丹江 南寧 揚州 迪慶 聊城 楊凌 撫州 六盤水

巨人網絡通訊聲明:本文標題《Python實現隨機生成迷宮并自動尋路》,本文關鍵詞  Python,實現,隨機,生成,迷宮,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python實現隨機生成迷宮并自動尋路》相關的同類信息!
  • 本頁收集關于Python實現隨機生成迷宮并自動尋路的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    一区二区视频在线看| 精品视频色一区| 狠狠色综合色综合网络| 石原莉奈在线亚洲三区| 亚洲成精国产精品女| 亚洲国产乱码最新视频 | 26uuu欧美日本| 日韩免费观看高清完整版在线观看| 67194成人在线观看| 欧美一级久久久久久久大片| 欧美一区二区三区男人的天堂| 欧美一级夜夜爽| 欧美v日韩v国产v| 国产女同性恋一区二区| 亚洲视频狠狠干| 亚洲成人精品影院| 美女视频网站黄色亚洲| 国产麻豆精品久久一二三| 国产成人精品一区二区三区四区 | 国产ts人妖一区二区| 成人av在线资源网站| 欧美在线一区二区| 精品剧情在线观看| 综合av第一页| 麻豆精品视频在线观看免费| 成人一级视频在线观看| 欧美区一区二区三区| 精品国产免费久久| 伊人一区二区三区| 蜜臀91精品一区二区三区| 国产99久久久精品| 欧美日韩一区二区在线视频| 精品成人在线观看| 亚洲一区成人在线| 丁香激情综合国产| 欧美一区二区在线观看| 国产精品免费av| 久久精品国产网站| 91福利国产成人精品照片| 精品成人免费观看| 无码av免费一区二区三区试看 | 亚洲视频电影在线| 麻豆精品在线看| 在线看一区二区| 国产精品美女www爽爽爽| 日韩高清在线电影| 日本韩国精品在线| 国产精品乱人伦中文| 美女视频网站久久| 欧美日韩日日摸| 伊人性伊人情综合网| 成人精品gif动图一区| 日韩一区二区三| 亚洲在线视频网站| www.亚洲色图.com| 久久欧美中文字幕| 加勒比av一区二区| 欧美丝袜自拍制服另类| 日韩码欧中文字| 91在线国内视频| 国产精品嫩草99a| 国产经典欧美精品| 国产情人综合久久777777| 日本欧美肥老太交大片| 欧美高清视频www夜色资源网| 亚洲欧美区自拍先锋| 99久免费精品视频在线观看| 国产女人aaa级久久久级| 国产成人综合亚洲网站| 久久久久综合网| 丁香天五香天堂综合| 久久众筹精品私拍模特| 激情小说亚洲一区| 久久综合色天天久久综合图片| 久久成人免费电影| 国产三级精品视频| 成人激情动漫在线观看| 国产精品久久久久久久久免费相片| 大桥未久av一区二区三区中文| 国产日韩欧美综合在线| 粉嫩欧美一区二区三区高清影视| 日本一区二区综合亚洲| 成人性视频免费网站| 亚洲欧美日韩中文字幕一区二区三区 | 中文字幕日韩一区| 欧美在线播放高清精品| 亚洲高清免费视频| 日韩免费性生活视频播放| 久久国产精品区| 国产精品女同互慰在线看| 91在线播放网址| 一区二区三区四区视频精品免费 | 一区二区三区在线免费观看 | 韩国精品一区二区| 久久久精品欧美丰满| 99久久er热在这里只有精品15| 亚洲精品乱码久久久久久| 666欧美在线视频| 高清在线观看日韩| 一区二区三区成人| 亚洲精品一区二区三区在线观看 | 亚洲色欲色欲www| 欧美日韩不卡在线| 大胆欧美人体老妇| 亚洲图片欧美色图| 亚洲国产精品成人综合色在线婷婷| 91久久精品午夜一区二区| 久久国产剧场电影| 一区二区三区免费观看| 日韩精品一区二区三区swag| 色综合一区二区| 韩国精品主播一区二区在线观看 | 欧美伦理影视网| 国产精品白丝jk黑袜喷水| 性做久久久久久久久| 国产精品丝袜久久久久久app| 91麻豆精品国产91久久久| 波多野结衣中文一区| 青青青伊人色综合久久| 国产精品福利影院| 精品剧情v国产在线观看在线| 日本乱人伦一区| 国产91精品入口| 国内外成人在线| 日韩avvvv在线播放| 亚洲欧美色一区| 国产丝袜在线精品| 欧美精品一区二区三区蜜桃| 91成人免费在线| 91尤物视频在线观看| 国产精品一二三在| 国内成人精品2018免费看| 日韩精品欧美成人高清一区二区| 亚洲乱码精品一二三四区日韩在线 | 日本不卡视频在线| 一区二区三区在线播放| 《视频一区视频二区| 精品福利一二区| 欧美大片一区二区三区| 678五月天丁香亚洲综合网| 91成人在线精品| 91在线视频观看| 色婷婷久久久综合中文字幕| 成人高清伦理免费影院在线观看| 国产精品一区在线观看你懂的| 免费精品视频最新在线| 美女免费视频一区| 日韩av成人高清| 久久精品免费观看| 国内成+人亚洲+欧美+综合在线| 久草精品在线观看| 国产一区二区三区久久悠悠色av | 中文字幕一区二区三区不卡在线| 久久久久久日产精品| 久久久久久免费网| 国产精品沙发午睡系列990531| 国产精品伦理一区二区| 亚洲三级在线播放| 一区二区三区高清不卡| 亚洲成人中文在线| 美脚の诱脚舐め脚责91 | 美女www一区二区| 狠狠色狠狠色综合| 不卡视频一二三| 欧美日韩一区二区在线观看| 日韩一区二区三区四区五区六区| 精品免费一区二区三区| 国产精品久久久久9999吃药| 亚洲在线视频一区| 久久成人免费电影| 91影院在线免费观看| 欧美精品国产精品| 国产欧美一区二区精品性色| 亚洲欧洲制服丝袜| 美女一区二区在线观看| 成人免费电影视频| 欧美日韩国产在线播放网站| 欧美一区午夜视频在线观看| 国产婷婷色一区二区三区在线| 亚洲美女少妇撒尿| 久久国产精品72免费观看| 成人精品视频一区二区三区尤物| 欧美综合欧美视频| 国产人伦精品一区二区| 亚洲地区一二三色| 国产成a人亚洲| 91精品国产福利在线观看| 国产精品久久夜| 精品午夜久久福利影院| 91成人免费在线| 国产精品美女久久久久久2018 | 久久综合色8888| 亚洲国产美国国产综合一区二区| 国产一区二区h| 欧美高清视频不卡网| 欧美国产日韩亚洲一区| 老鸭窝一区二区久久精品| 色综合久久久久久久| 久久久久久久av麻豆果冻| 视频一区二区三区在线|