/**
* function:起终查询
*/
// 构建邻接表
public static Map<String, Map<String, Integer>> buildAdjacencyList() {
Connection connection = JDBCUtils.getConn();
Map<String, Map<String, Integer>> adjacencyList = new HashMap<>();
try {
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT Starting_Station, Terminus_Station FROM station");
while (resultSet.next()) {
String startingStation = resultSet.getString("Starting_Station");
String terminusStation = resultSet.getString("Terminus_Station");
addConnection(adjacencyList, startingStation, terminusStation);
addConnection(adjacencyList, terminusStation, startingStation);
}
resultSet.close();
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
// 适当处理 SQLException
}
return adjacencyList;
}
// 将连接添加到邻接表
private static void addConnection(Map<String, Map<String, Integer>> adjacencyList, String source, String destination) {
if (!adjacencyList.containsKey(source))
{
adjacencyList.put(source, new HashMap<>());
}
adjacencyList.get(source).put(destination, 1);
}
//根据 buildAdjacencyList()函数 求邻接表 最短路径
public static List<String> shortest(User user) {
String startingStation = user.getStarting_Station();
String terminusStation = user.getTerminus_Station();
Map<String, Map<String, Integer>> adjacencyList = buildAdjacencyList();
Map<String, Integer> distance = new HashMap<>();
Map<String, String> previous = new HashMap<>();
PriorityQueue<String> queue = new PriorityQueue<>(Comparator.comparingInt(distance::get));
for (String station : adjacencyList.keySet()) {
distance.put(station, Integer.MAX_VALUE);
previous.put(station, null);
}
distance.put(startingStation, 0);
queue.add(startingStation);
while (!queue.isEmpty()) {
String currentStation = queue.poll();
if (currentStation.equals(terminusStation)) {
break; // Found shortest path to terminus station
}
Map<String, Integer> neighbors = adjacencyList.get(currentStation);
if (neighbors != null) {
for (String neighbor : neighbors.keySet()) {
int alt = distance.get(currentStation) + neighbors.get(neighbor);
if (alt < distance.get(neighbor)) {
distance.put(neighbor, alt);
previous.put(neighbor, currentStation);
queue.add(neighbor);
}
}
}
}
// Reconstruct shortest path
List<String> shortestPath = new ArrayList<>();
String current = terminusStation;
while (previous.get(current) != null) {
shortestPath.add(current);
current = previous.get(current);
}
shortestPath.add(startingStation);
Collections.reverse(shortestPath);
System.out.println(shortestPath);
return shortestPath;
}

浙公网安备 33010602011771号