2023.10.10每日总结

import java.util.*;

public class Subway {
    private Map<String, List<String>> lines; // 地铁线路图
    private Map<String, List<String>> stations; // 地铁站点信息
    private Map<String, Map<String, Integer>> connections; // 地铁站点之间的连接信息

    public Subway() {
        lines = new HashMap<>();
        stations = new HashMap<>();
        connections = new HashMap<>();
        // 初始化地铁线路图、站点信息和连接信息
        // 省略代码
    }

    public List<String> shortestPath(String start, String end) {
        Map<String, Integer> distances = new HashMap<>(); // 记录起点到各个站点的距离
        Map<String, String> previous = new HashMap<>(); // 记录每个站点的前一个站点
        PriorityQueue<String> queue = new PriorityQueue<>(Comparator.comparingInt(distances::get)); // 用于存储未处理的站点

        // 初始化距离和前置节点信息
        for (String station : stations.keySet()) {
            distances.put(station, Integer.MAX_VALUE);
            previous.put(station, null);
        }
        distances.put(start, 0);

        // 将起点加入队列
        queue.offer(start);

        while (!queue.isEmpty()) {
            String current = queue.poll();
            if (current.equals(end)) {
                break;
            }
            for (String neighbor : connections.get(current).keySet()) {
                int distance = distances.get(current) + connections.get(current).get(neighbor);
                if (distance < distances.get(neighbor)) {
                    distances.put(neighbor, distance);
                    previous.put(neighbor, current);
                    queue.offer(neighbor);
                }
            }
        }

        // 构建最短路径
        List<String> path = new ArrayList<>();
        String current = end;
        while (current != null) {
            path.add(0, current);
            current = previous.get(current);
        }

        return path;
    }
}

 

posted @ 2023-10-10 21:42  超爱彬宝同学  阅读(18)  评论(0)    收藏  举报