迷路探索プログラム(Python)
【仕様】
入口から入って、出口まで正しい経路を探索するプログラム
進行方向は「右」「前」「左」「後ろ」に向きに変えることができる。
【コメント】
適当に作ったので、バグがあるかもしれません。
バグを見つけたら、ご連絡ください。
【code(データ部)】
--------------------------------------------------------------------
import numpy as np
# Passasge
P=1
# Mall
W=0
# Goal
G=2
# BANPEI
B=-1
MAZE=np.array(
[[-1,-1,-1,-1,-1,-1,-1,-1,-1],
[-1, 0, 0, 0, 0, 0, 0, 0,-1],\
[ 1, 1, 1, 1, 1, 1, 0, 0,-1],\
[-1, 0, 0, 1, 0, 1, 1, 0,-1],\
[-1, 0, 0, 1, 0, 1, 0, 0,-1],\
[-1, 0, 0, 1, 0, 0, 0, 0,-1],\
[-1, 0, 1, 1, 1, 1, 1, 1, 2],\
[-1, 0, 0, 0, 0, 0, 0, 0,-1],\
[-1,-1,-1,-1,-1,-1,-1,-1,-1]])
--------------------------------------------------------------------
【code(アルゴリズム部)】
--------------------------------------------------------------------
ftrans=np.array([[ 1, 0],[ 0, 1]])
rtrans=np.array([[ 0,-1],[ 1, 0]])
ltrans=np.array([[ 0, 1],[-1, 0]])
btrans=np.array([[ -1,0],[ 0,-1]])
def search(MAZE, route ,dir):
y,x=route[-1]
next_y,next_x=y+dir[0],x+dir[1]
route.append((next_y,next_x))
if MAZE[next_y][next_x] == G:
print(route)
return True
else:
if MAZE[next_y][next_x] == B:
route.pop()
return False
if MAZE[next_y][next_x] == W:
route.pop()
return False
if MAZE[next_y][next_x] == P:
if len(route)>2:
if (route[-1]==route[-3]):
route.pop()
route.pop()
if (search(MAZE,route,rtrans.dot(np.array(dir)))):
return True
if (search(MAZE,route,ftrans.dot(np.array(dir)))):
return True
if (search(MAZE,route,ltrans.dot(np.array(dir)))):
return True
if (search(MAZE,route,btrans.dot(np.array(dir)))):
return True
return False
enter=[(2,0)]
search(MAZE,[(2,0)],[0,1])
----------------------------------------------------------------------------
【result】
----------------------------------------------------------------------------
[(2, 0), (2, 1), (2, 2), (2, 3), (3, 3), (4, 3), (5, 3), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (6, 8)]
----------------------------------------------------------------------------