| | |
| | | package com.zy.acs.manager.core.domain; |
| | | |
| | | import com.zy.acs.framework.common.Cools; |
| | | import lombok.Data; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * Created by vincent on 10/24/2024 |
| | |
| | | this.laneId = laneId; |
| | | } |
| | | |
| | | public String[] queryEndPoints() { |
| | | if (Cools.isEmpty(this.codes)) { |
| | | return null; |
| | | } |
| | | String[] endPoints = new String[2]; |
| | | if (this.codes.size() == 1) { |
| | | endPoints[0] = this.codes.get(0); |
| | | endPoints[1] = this.codes.get(0); |
| | | } else { |
| | | endPoints[0] = this.codes.get(0); |
| | | endPoints[1] = this.codes.get(this.codes.size() - 1); |
| | | } |
| | | return endPoints; |
| | | } |
| | | |
| | | public void sortUsingDfs(Map<String, List<String>> adjacencyCodeMap) { |
| | | if (Cools.isEmpty(this.codes) || this.codes.size() < 2) { |
| | | return; |
| | | } |
| | | Set<String> visited = new HashSet<>(); |
| | | List<String> result = new ArrayList<>(); |
| | | |
| | | String startNode = findStartNode(adjacencyCodeMap); |
| | | dfs(startNode, adjacencyCodeMap, visited, result); |
| | | |
| | | for (String code : this.codes) { |
| | | if (!visited.contains(code)) { |
| | | dfs(code, adjacencyCodeMap, visited, result); |
| | | } |
| | | } |
| | | |
| | | this.codes = result; |
| | | } |
| | | |
| | | private String findStartNode(Map<String, List<String>> adjacencyCodeMap) { |
| | | for (String code : this.codes) { |
| | | List<String> neighbors = adjacencyCodeMap.get(code); |
| | | if (!Cools.isEmpty(neighbors)) { |
| | | int count = 0; |
| | | for (String neighbor : neighbors) { |
| | | if (this.codes.contains(neighbor)) { |
| | | count++; |
| | | } |
| | | } |
| | | if (count == 1) { |
| | | return code; |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private static void dfs(String node, Map<String, List<String>> adjacencyCodeMap, Set<String> visited, List<String> result) { |
| | | visited.add(node); |
| | | result.add(node); |
| | | |
| | | if (adjacencyCodeMap.containsKey(node)) { |
| | | for (String neighbor : adjacencyCodeMap.get(node)) { |
| | | if (!visited.contains(neighbor)) { |
| | | dfs(neighbor, adjacencyCodeMap, visited, result); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | public void removeInteraction(Map<String, List<String>> adjacencyCodeMap) { |
| | | if (Cools.isEmpty(this.codes)) { |
| | | return; |
| | | } |
| | | this.codes.removeIf(code -> adjacencyCodeMap.get(code).size() > 2); |
| | | } |
| | | |
| | | } |