之前做的一个项目,现在才把它记录下来,项目中有一个这样功能,用户在地图上面选择起点、终点,需要在地图上面寻找一条最短的路径并显示到地图上。
在寻路中有两个比较常用的算法,一个迪杰斯特(Dijkstra)算法,迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。因为它是一个广度优先的算法,所以它的效率会比较低。另外一个是A星算法,它是基于启发式代价函数,启发式函数在应用和游戏中非常有用。在速度和精确度之间取得折中将会让你的程序运行得更快。
下面是我实现的代码:
package com.heng.test.map;
import java.util.*;
/**
* A*算法
* @author 黎荣恒
*
*/
public class AStar {
private int[][] map;// 地图(0可通过 1不可通过)
private List<Node> openList;// 开启列表
private List<Node> closeList;// 关闭列表
private final int COST_STRAIGHT = 10;// 垂直方向或水平方向移动的路径评分
private final int COST_DIAGONAL = 14;// 斜方向移动的路径评分
private int row;// 行
private int column;// 列
public AStar(int[][] map, int row, int column) {
this.map = map;
this.row = row;//行
this.column = column;//列
openList = new ArrayList<Node>();//初始化开启列表
closeList = new ArrayList<Node>();//初始化关闭列表
}
/**
* 查找坐标
* @param x1 起点x轴坐标