我使用0,1数组实现了一个迷宫.入口和目标在迷宫中得到修复.进入始终是迷宫的0,0点.目标始终是迷宫的m-1,n-1点.我现在使用广度优先搜索算法,但速度不够好.特别适用于大型迷宫(100*100左右).有人可以帮我解决这个算法吗?
这是我的解决方案:
queue = []
position = start_node
mark_tried(position)
queue << position
while(!queue.empty?)
p = queue.shift #pop the first element
return true if maze.goal?(p)
left = p.left
visit(queue,left) if can_visit?(maze,left)
right = p.right
visit(queue,right) if can_visit?(maze,right)
up = p.up
visit(queue,up) if can_visit?(maze,up)
down = p.down
visit(queue,down) if can_visit?(maze,down)
end
return false
Run Code Online (Sandbox Code Playgroud)
can_visit?方法检查节点是否在迷宫内,节点是否被访问,节点是否被阻塞.