二维地图的寻路算法2

该博客探讨了一种二维地图的寻路算法,虽然得到的解可能非最优但速度快于普通回溯算法。通过Java实现,算法使用栈存储操作步骤,并进行路径优化,避免在地图上转圈。文章提到,通过调整评价值函数可以改进算法效果,欢迎读者提供优化建议。

    二维地图的寻路算法2。

    首先需要说明本算法得到的解不一定是最优解,但是比普通的回溯算法速度要快。

    代码如下:

  1. import java.util.Stack;
  2. /**
  3.  * 找到从地图上一个点到另一个点的路径
  4.  * 
  5.  * @author cuilichen
  6.  * 
  7.  */
  8. public class FindPath {
  9.     /**
  10.      * 用来存放操作步骤的栈
  11.      */
  12.     private Stack stack = new Stack();
  13.     /**
  14.      * 地图的宽度
  15.      */
  16.     private int wid = 8;
  17.     /**
  18.      * 找到从地图上一个点到另一个点的路径
  19.      * 
  20.      * @param map
  21.      * @param origin
  22.      * @param target
  23.      * @return
  24.      */
  25.     public String find(byte[] map, int origin, int target) {
  26.         if (origin == target) {
  27.             return "";
  28.         }
  29.         int[] step = new int[10];
  30.         step[1] = origin;
  31.         judge(map, step, target);
  32.         stack.push(step);// 根节点
  33.         if (!findPath(map, target)) { // 没有找到路径
  34.             return null;
  35.         }
  36.         optimize(stack);
  37.         StringBuffer sb = new StringBuffer();
  38.         for (int i = 1; i < stack.size(); i++) {
  39.             step = (int[]) stack.elementAt(i);
  40.             sb.append((char) step[0]);
  41.         }
  42.         return sb.toString();
  43.     }
  44.     /**
  45.      * 得到相邻4个点的评价值(距目标点的直线距离的平方),并按照从小到大的顺序排列。
  46.      * 
  47.      * @param map
  48.      * @param node
  49.      * @param target
  50.      */
  51.     private void judge(byte[] map, int[] node, int target) {
  52.         int origin = node[1];
  53.         int x0 = origin % wid;
  54.         int y0 = origin / wid;
  55.         int x1 = target % wid;
  56.  &nbs
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值