import java.util.*;
public class TopologicalSort {
public static void main(String[] args) {
Map<Integer, List<Integer>> graph = new HashMap<>();
graph.put(1, Arrays.asList(2, 3));
graph.put(2, Arrays.asList(4, 5));
graph.put(3, Arrays.asList(4, 6));
graph.put(4, Collections.singletonList(7));
graph.put(5, Collections.singletonList(7));
graph.put(6, Collections.singletonList(7));
graph.put(7, Collections.emptyList());
List<Integer> sortedList = topologicalSort(graph);
System.out.println("拓扑排序结果:" + sortedList);
}
public static List<Integer> topologicalSort(Map<Integer, List<Integer>> graph) {
Map<Integer, Integer> inDegreeMap = new HashMap<>();
for (Integer node : graph.keySet()) {
inDegreeMap.put(node, 0);
}
for (List<Integer> neighbors : graph.values()) {
for (Integer neighbor : neighbors) {
inDegreeMap.put(neighbor, inDegreeMap.getOrDefault(neighbor, 0) + 1);
}
}
List<Integer> sortedList = new ArrayList<>();
Queue<Integer> queue = new LinkedList<>();
for (Integer node : inDegreeMap.keySet()) {
if (inDegreeMap.get(node) == 0) {
queue.offer(node);
}
}
while (!queue.isEmpty()) {
Integer node = queue.poll();
sortedList.add(node);
List<Integer> neighbors = graph.get(node);
for (Integer neighbor : neighbors) {
inDegreeMap.put(neighbor, inDegreeMap.get(neighbor) - 1);
if (inDegreeMap.get(neighbor) == 0) {
queue.offer(neighbor);
}
}
}
return sortedList;
}
}