From beb476733eaff1f3a76ec1be772337655803cccb Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期五, 25 十月 2024 10:53:10 +0800 Subject: [PATCH] # --- zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/Lane.java | 76 +++++++++++++++++++++++++++++++++++++- 1 files changed, 74 insertions(+), 2 deletions(-) diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/Lane.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/Lane.java index 1f40536..123b768 100644 --- a/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/Lane.java +++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/core/domain/Lane.java @@ -1,9 +1,9 @@ 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 @@ -22,4 +22,76 @@ 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); + } + } -- Gitblit v1.9.1