算法进阶--模板及经典题型

算法模板持续更新中

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;
}

发布了52 篇原创文章 · 获赞 7 · 访问量 1817

猜你喜欢

转载自blog.csdn.net/weixin_44107920/article/details/103936402