二维地图的寻路算法2。
首先需要说明本算法得到的解不一定是最优解,但是比普通的回溯算法速度要快。
代码如下:
- import java.util.Stack;
- /**
- * 找到从地图上一个点到另一个点的路径
- *
- * @author cuilichen
- *
- */
- public class FindPath {
- /**
- * 用来存放操作步骤的栈
- */
- private Stack stack = new Stack();
- /**
- * 地图的宽度
- */
- private int wid = 8;
- /**
- * 找到从地图上一个点到另一个点的路径
- *
- * @param map
- * @param origin
- * @param target
- * @return
- */
- public String find(byte[] map, int origin, int target) {
- if (origin == target) {
- return "";
- }
- int[] step = new int[10];
- step[1] = origin;
- judge(map, step, target);
- stack.push(step);// 根节点
- if (!findPath(map, target)) { // 没有找到路径
- return null;
- }
- optimize(stack);
- StringBuffer sb = new StringBuffer();
- for (int i = 1; i < stack.size(); i++) {
- step = (int[]) stack.elementAt(i);
- sb.append((char) step[0]);
- }
- return sb.toString();
- }
- /**
- * 得到相邻4个点的评价值(距目标点的直线距离的平方),并按照从小到大的顺序排列。
- *
- * @param map
- * @param node
- * @param target
- */
- private void judge(byte[] map, int[] node, int target) {
- int origin