首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >拓扑排序最初系列一>课程表

拓扑排序最初系列一>课程表

作者头像
用户11305962
发布2025-07-20 15:31:12
发布2025-07-20 15:31:12
1340
举报
文章被收录于专栏:学习学习

题目:

**

在这里插入图片描述
在这里插入图片描述

**

拓扑排序实现原理:

在这里插入图片描述
在这里插入图片描述

题目解析:

****

这里是引用
这里是引用

代码

代码语言:javascript
复制
class Solution {
    public boolean canFinish(int n, int[][] p) {
        Map<Integer,List<Integer>> edges = new HashMap<>();
        int[] in = new int[n];//统计每个顶点入度数

        //建图
        for(int i = 0; i < p.length; i++){
            int a = p[i][0], b = p[i][1]; //指向: b -> a
            if(!edges.containsKey(b)){
                edges.put(b,new ArrayList<>());
            }
            edges.get(b).add(a);
            in[a]++;
        }

        Queue<Integer> q = new LinkedList<>();
        //进行拓扑排序: 先把入度为0的节点加入队列
        for(int i = 0; i < n; i++){
            if(in[i] == 0) q.offer(i);
        }

        while(!q.isEmpty()){
            int t = q.poll();

            //可能会指向空的
            for(int x : edges.getOrDefault(t, new ArrayList<>())){
                //删除节点指向的边
                in[x]--;
                if(in[x] == 0) q.offer(x);
            }
        }

        //判断是否有环
        for(int pos : in){
            if(pos != 0) return false; 
        }
        return true;
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目:
  • 拓扑排序实现原理:
  • 题目解析:
    • 代码
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档