图的拓扑排序
拓扑排序
* 将所有入度为0的点入队,并将这个点去除后对其他点更新,再找所有入度为0的点入队
* 按照以上操作,得到的队列即为一个拓扑排序结构
代码及解析:
1 public static List<Node> tpSort(Graph graph) { 2 Queue<Node> zeroQue = new LinkedList<>(); 3 HashMap<Node,Integer> inMap = new HashMap<>();//存所有节点入度值,因为这个入度值后面要改,为了保证原图 4 //和操作前相同,所以将入度值存入一个临时变量来处理 5 for (Node node : graph.nodes.values()) {//第一次遍历,先将所有初始入度为0节点进队列 6 //并把所有节点入度存到inMap中 7 inMap.put(node,node.in); 8 if (node.in == 0) { 9 zeroQue.add(node); 10 } 11 } 12 List<Node> result = new ArrayList<>(); 13 while (zeroQue.size() > 0) { 14 Node cur = zeroQue.poll(); 15 result.add(cur); 16 for (Node next : cur.nexts) { 17 inMap.put(next, inMap.get(next) - 1); 18 if (inMap.get(next) == 0) { 19 zeroQue.add(next); 20 } 21 } 22 } 23 return result; 24 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律