From d77edc6de3ffe93afd5680953759fff556b5ca73 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期五, 03 一月 2025 08:30:05 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java | 52 +++++++++++++++++++++++++++++++++++++++++----------- 1 files changed, 41 insertions(+), 11 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java index b8e0a90..ef32661 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/service/astart/AStarNavigateService.java @@ -48,6 +48,13 @@ PriorityQueue<AStarNavigateNode> openQueue = new PriorityQueue<>(); Set<AStarNavigateNode> existNodes = new HashSet<>(); + Map<String, Integer> bestGMap = new HashMap<>(); + + start.setG(0); + start.setH(calcNodeCost(start, end)); + start.setF(start.getG() + start.getH()); + String startKey = start.getX() + "_" + start.getY(); + bestGMap.put(startKey, start.getG()); openQueue.add(start); existNodes.add(start); @@ -159,27 +166,50 @@ node.setH(calcNodeCost(node, end)); node.setF(node.getG() + node.getH()); - openQueue.add(node); - existNodes.add(node); + String key = node.getX() + "_" + node.getY(); + Integer recordedG = bestGMap.get(key); + if (recordedG == null || node.getG() <= recordedG) { + bestGMap.put(key, node.getG()); + + openQueue.add(node); + } + +// openQueue.add(node); +// existNodes.add(node); } } return null; } + // right left up down + private final static int[][] DIRECTIONS = {{0,1},{0,-1},{-1,0},{1,0}}; + // 鑾峰彇鍥涘懆鑺傜偣 private List<AStarNavigateNode> getNeighborNodes(AStarNavigateNode currentNode, int[][] mapMatrix, Set<AStarNavigateNode> existNodes) { int x = currentNode.getX(); int y = currentNode.getY(); + AStarNavigateNode parent = currentNode.getParent(); List<AStarNavigateNode> neighbourNodes = new CopyOnWriteArrayList<>(); - List<AStarNavigateNode> possibleNodes = Arrays.asList( - new AStarNavigateNode(x, y + 1), // right - new AStarNavigateNode(x, y - 1), // left - new AStarNavigateNode(x - 1, y), // up - new AStarNavigateNode(x + 1, y) // down - ); +// List<AStarNavigateNode> possibleNodes = Arrays.asList( +// new AStarNavigateNode(x, y + 1), // right +// new AStarNavigateNode(x, y - 1), // left +// new AStarNavigateNode(x - 1, y), // up +// new AStarNavigateNode(x + 1, y) // down +// ); + + List<AStarNavigateNode> possibleNodes = new ArrayList<>(); + for (int[] d: DIRECTIONS) { + int nx = x + d[0]; + int ny = y + d[1]; + // 濡傛灉鐖惰妭鐐逛笉涓虹┖锛屽苟涓� (nx,ny) 绛変簬鐖惰妭鐐瑰潗鏍囷紝鍒欒烦杩� + if (parent != null && nx == parent.getX() && ny == parent.getY()) { + continue; + } + possibleNodes.add(new AStarNavigateNode(nx, ny)); + } possibleNodes.parallelStream() .map(extendNode -> extendNeighborNodes(currentNode, extendNode, mapMatrix, existNodes, null, null)) @@ -215,9 +245,9 @@ assert mapMatrix[x][y] == MapNodeType.ENABLE.val; - if (existNodes.contains(nextNode)) { - return null; - } +// if (existNodes.contains(nextNode)) { +// return null; +// } // 鍒ゆ柇閫氳繃鎬� String routeCdaKey = RouteGenerator.generateRouteCdaKey(new int[]{currentNode.getX(), currentNode.getY()}, new int[]{nextNode.getX(), nextNode.getY()}); -- Gitblit v1.9.1