#
Junjie
2024-12-24 d8f361c9d69271aaa58ba19e75f38e0fee00f3bb
src/main/java/com/zy/common/utils/NavigateSolution.java
@@ -1,5 +1,6 @@
package com.zy.common.utils;
import com.core.common.SpringUtils;
import com.zy.common.model.NavigateNode;
import java.util.ArrayList;
@@ -15,19 +16,12 @@
    int[][] map = {{}};
    public NavigateSolution() {
        //载入地图
        NavigateMapData mapData = new NavigateMapData();
        int[][] data = mapData.getData();
        this.map = data;
    }
    public NavigateSolution(Integer mapType, Integer lev, List<int[]> whitePoints) {
    public NavigateSolution(Integer mapType, Integer lev, List<int[]> whitePoints, List<int[]> shuttlePoints) {
        //载入地图指定层高地图
        NavigateMapData mapData = new NavigateMapData(lev);
        int[][] data = mapData.getDataFromRedis(mapType, whitePoints);
        NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
        int[][] data = navigateMapData.getDataFromRedis(lev, mapType, whitePoints, shuttlePoints);
        if (data == null) {
            data = mapData.getData(mapType, whitePoints);
            data = navigateMapData.getData(lev, mapType, whitePoints, shuttlePoints);
        }
        this.map = data;
    }
@@ -59,7 +53,7 @@
            //对这个结点遍历,看是否有目标结点出现
            for (NavigateNode node : neighbour_node) {
                // G + H + E (对启发函数增加去拐点方案calcNodeExtraCost)
                int gCost = calcNodeCost(current_node, node) * calcNodeExtraCost(current_node, node, end);
                int gCost = calcNodeCost(current_node, node) + calcNodeExtraCost(current_node, node, end);
                if (node.getX() == end.getX() && node.getY() == end.getY()) {//找到目标结点就返回
                    //init_node操作把这个邻居结点的父节点设置为当前结点
                    //并且计算出G, F, H等值
@@ -202,13 +196,24 @@
            return 1;
        }
        // 拐向主轨道的点
        if (map[nextNode.getX()][nextNode.getY()] == 3) {
            //------------------三凯独特判断------------------//
            if (nextNode.getX() == 15) {
                return 2;//影响算法,不要在15排这个主轨道换向
            }
            //------------------三凯独特判断------------------//
            return 0;
        }
        // 普通拐点
        /*
        拐点判断逻辑
        拿到父节点和下一节点
        通过判断父节点和下一节点的x数据和y数据都不相同时,则表明当前坐标是一个拐点
         */
        return 2;
        return 3;
    }
    //------------------A*启发函数-end------------------//