二维地图寻路算法

本文介绍了二维地图中实现寻路的简单算法。通过使用Java的Stack数据结构,从起点开始,按照左、右、上、下顺序尝试移动,直到找到目标位置。如果四个方向都无法通行,将回溯上一步。虽然这种方法可能不是最优路径,但能有效解决寻路问题。
摘要由CSDN通过智能技术生成
  1.  

      二维地图是游戏中常见的形式。在二维地图中,寻路是我们常见的需求。这里是一个二维地图寻路的简单算法。

     在地图中:

        1表示不可通过的单元格,

        0表示可以通过的单元。

给出一个原始位置和一个目标位置。算法如下:

 

  1. import java.util.Stack;
  2. public class FindPath {
  3.  private static final int wid = 8;
  4.  private static final int hei = 8;
  5.  private Stack stack = new Stack();
  6.  /**
  7.   * @param args
  8.   */
  9.  public static void main(String[] args) {
  10.   // TODO Auto-generated method stub
  11.   byte[] map = { 1,1,1,1,1,1,1,1,
  12.     1,1,1,1,0,1,1,1,
  13.     1,0,0,1,0,0,1,1,
  14.     1,0,0,0,0,0,<
你可以使用广度优先搜索(BFS)算法来解决二维数组的寻路问题。下面是一个简单的示例代码,用于找到从起点到终点的最短路径: ```python from collections import deque def bfs(matrix, start, end): # 获取二维数组的行数和列数 rows = len(matrix) cols = len(matrix[0]) # 定义四个方向的偏移量,上、下、左、右 directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] # 使用队列来保存待访问的节点 queue = deque() queue.append(start) # 使用visited集合来记录已经访问过的节点 visited = set() visited.add(start) # 使用distances字典来记录每个节点到起点的距离 distances = {} distances[start] = 0 while queue: node = queue.popleft() if node == end: # 找到终点,返回最短路径长度 return distances[node] x, y = node for dx, dy in directions: new_x, new_y = x + dx, y + dy # 检查新的节点是否越界或已经访问过 if 0 <= new_x < rows and 0 <= new_y < cols and (new_x, new_y) not in visited and matrix[new_x][new_y] != 0: # 更新新节点的距离,并添加到队列和visited集合中 new_node = (new_x, new_y) queue.append(new_node) visited.add(new_node) distances[new_node] = distances[node] + 1 # 没有找到终点,返回-1表示无法到达 return -1 ``` 你可以根据实际情况调用这个函数,并传入相应的参数,例如起点坐标和终点坐标。注意,这个示例代码假设二维数组中的非零元素表示可以通过的路径,零表示障碍物。你可以根据实际需求进行修改。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值