算法模板持续更新中
1、A星寻路法
A※寻路法-是一种寻找最短路径并避开障碍物的算法
适用于解决迷宫问题和有障碍地图问题
上代码
//迷宫地图
public static final int[][] MAZE = {
{0,0,0,0,0,0,0},
{0,0,0,1,0,0,0},
{0,0,0,1,0,0,0},
{0,0,0,1,0,0,0},
{0,0,0,0,0,0,0},
};
/*
* @param start 迷宫起点
* @param end 迷宫终点
*/
public static Grid aStartSearch(Grid start , Grid end){
Arraylist<Grid> openList = new ArrayList<Grid>();
Arraylist<Grid> closeList = new ArrayList<Grid>();
//把起点加入 openList
openList.add(start);
//主循环,每一轮检查一个当前方格结点
while(openList.size()>0){
// 在openList中查找 F值最小的结点,将其作为当前方格结点
Grid currentGrid = findMinGrid(openList);
//将当前方格从openList中移除
openList.remove(currentGrid);
//当前方格进入 closeList
closeList.add(currentGrid);
//找到所有邻近结点
List<Grid>neighbors = findNeighbors(currentGrid,openList,closeList);
for(Grid grid : neighbors){
if(!openList.contains(grid)){
//邻近结点不在openList中,标记“父节点”、G、H、F,并放入openList
grid.inintGrid(currentGrid,end);
openList.add(grid);
}
}
//如果终点在openList中,直接返回终点格子
for(Grid grid : openList){
if((grid.x == end.x) && (grid.y == end.y)){
return grid;
}
}
}
//openList用尽,仍然找不到终点,说明终点不可到达,返回空
return null;
}
private static Grid finMinGrid(ArrayList<Grid> openList){
Grid tempGrid = openList.get(0);
for(Grid grid : openList){
if(grid.f < tempGrid.f){
tempGrid = grid;
}
}
return tempGrid;
}