图的拓扑排序

拓扑排序
* 将所有入度为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     }
复制代码

 

posted @   jue1e0  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示