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