| | |
| | | |
| | | int[][] map = {{}}; |
| | | |
| | | public NavigateSolution() { |
| | | //载入地图 |
| | | NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class); |
| | | navigateMapData.setLev(1); |
| | | int[][] data = navigateMapData.getData(); |
| | | this.map = data; |
| | | } |
| | | |
| | | public NavigateSolution(Integer mapType, Integer lev, List<int[]> whitePoints, List<int[]> shuttlePoints) { |
| | | //载入地图指定层高地图 |
| | | NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class); |
| | | navigateMapData.setLev(lev); |
| | | int[][] data = navigateMapData.getDataFromRedis(mapType, whitePoints, shuttlePoints); |
| | | int[][] data = navigateMapData.getDataFromRedis(lev, mapType, whitePoints, shuttlePoints); |
| | | if (data == null) { |
| | | data = navigateMapData.getData(mapType, whitePoints, shuttlePoints); |
| | | data = navigateMapData.getData(lev, mapType, whitePoints, shuttlePoints); |
| | | } |
| | | this.map = data; |
| | | } |
| | |
| | | //对这个结点遍历,看是否有目标结点出现 |
| | | 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等值 |
| | |
| | | return 1; |
| | | } |
| | | |
| | | // 拐向主轨道的点 |
| | | if (map[nextNode.getX()][nextNode.getY()] == 3) { |
| | | //------------------三凯独特判断------------------// |
| | | if (nextNode.getX() == 15) { |
| | | return 2;//影响算法,不要在15排这个主轨道换向 |
| | | } |
| | | //------------------三凯独特判断------------------// |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | // 普通拐点 |
| | | /* |
| | | 拐点判断逻辑 |
| | | 拿到父节点和下一节点 |
| | | 通过判断父节点和下一节点的x数据和y数据都不相同时,则表明当前坐标是一个拐点 |
| | | */ |
| | | return 10; |
| | | return 3; |
| | | } |
| | | |
| | | //------------------A*启发函数-end------------------// |