clllll  

有向图,无环, 有入度为零 的 点

  • 先看哪个点是入度为0的点 比如A
  • 然后把 以 A出发的 路径叉掉
  • 找下一个入度为0的点 。 重复操作
public static void sortedTopology(Graph graph) {
// 拓扑排序
// 保存 节点剩余的入度
HashMap<Node, Integer> inMap = new HashMap<>();
// 保存 入度为0 的节点 的队列
LinkedList<Node> zeroInQueue = new LinkedList<>();
for (Node node : graph.nodes.values()) {
inMap.put(node, node.in);
if (node.in == 0) {
zeroInQueue.add(node);
}
}
// 保存排序结果
List<Node> result = new ArrayList<>();
while(!zeroInQueue.isEmpty()){
Node cur = zeroInQueue.poll();
result.add(cur);
for(Node next : cur.nexts){
// 修改 以当前节点 出发的路径 的 节点 的入度
inMap.put(next, inMap.get(next) - 1);
// 如果当前节点的入度为0,也加入 zeroInQueue
if(inMap.get(next) == 0){
zeroInQueue.add(next);
}
}
}
}
posted on   llcl  阅读(51)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
 
点击右上角即可分享
微信分享提示