| | |
| | | NavigateNode originNode = new NavigateNode(codeMatrixIdx[0], codeMatrixIdx[1], code); |
| | | |
| | | List<NavigateNode> includeList = new ArrayList<>(); |
| | | List<NavigateNode> existNodes = new ArrayList<>(); |
| | | Set<NavigateNode> existNodes = new HashSet<>(); |
| | | |
| | | includeList.add(originNode); |
| | | existNodes.add(originNode); |
| | |
| | | |
| | | public void spreadWaveNode(NavigateNode originNode, NavigateNode currNode |
| | | , String[][] codeMatrix, String[][] cdaMatrix, Double radiusLen |
| | | , List<NavigateNode> includeList, List<NavigateNode> existNodes) { |
| | | , List<NavigateNode> includeList, Set<NavigateNode> existNodes) { |
| | | int x = currNode.getX(); |
| | | int y = currNode.getY(); |
| | | |
| | |
| | | |
| | | public void extendNeighborNodes(NavigateNode originNode, NavigateNode nextNode |
| | | , String[][] codeMatrix, String[][] cdaMatrix, Double radiusLen |
| | | , List<NavigateNode> includeList, List<NavigateNode> existNodes) { |
| | | , List<NavigateNode> includeList, Set<NavigateNode> existNodes) { |
| | | |
| | | int x = nextNode.getX(); |
| | | int y = nextNode.getY(); |
| | |
| | | return; |
| | | } |
| | | |
| | | if (this.isExist(nextNode, existNodes)) { |
| | | if (existNodes.contains(nextNode)) { |
| | | return; |
| | | } |
| | | |
| | |
| | | |
| | | } |
| | | } |
| | | } |
| | | |
| | | private boolean isExist(NavigateNode node, List<NavigateNode> existNodes) { |
| | | for (NavigateNode existNode : existNodes) { |
| | | if (this.isSame(node, existNode)) { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | private boolean isSame(NavigateNode o1, NavigateNode o2) { |
| | | if (Cools.isEmpty(o1, o2)) { |
| | | return false; |
| | | } |
| | | return o1.getX() == o2.getX() && o1.getY() == o2.getY(); |
| | | } |
| | | |
| | | // v2 BFS ------------------------------------------------------------------------------ |
| | |
| | | } |
| | | |
| | | // If the node has already been visited, skip it |
| | | if (this.isExist0(nextNode, visited)) { |
| | | if (visited.contains(nextNode)) { |
| | | return; |
| | | } |
| | | |
| | |
| | | queue.offer(nextNode); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private boolean isExist0(NavigateNode node, Set<NavigateNode> existNodes) { |
| | | for (NavigateNode existNode : existNodes) { |
| | | if (this.isSame(node, existNode)) { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | |