当前位置: 首页 > news >正文

2025年- G34-Lc108-207. 课程计划--java版

1.题目描述

在这里插入图片描述
中文:
课程安排 (Course Schedule) - 题目翻译
你需要完成 numCourses 门课程,课程编号从 0 到 numCourses - 1。

你会得到一个 前置课程要求数组 prerequisites,其中 prerequisites[i] = [a_i, b_i] 表示:

如果你想选修课程 a_i,你必须先完成课程 b_i。

要求
如果你可以完成所有课程,返回 true;否则,返回 false。

2.思路

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

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

在这里插入图片描述
在这里插入图片描述
例子2:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
例子2:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.代码实现

class Solution {
    public boolean canFinish(int numCourses, int[][] prerequisites) {

        List<List<Integer>> gra=new ArrayList<>();
        for(int i=0;i<numCourses;i++)
        {
            gra.add(new ArrayList<>());//构建prerequisites的二维数组, // gra 现在是 [[ ]],// gra 现在是 [[ ], [ ]]
        }

        for(int[] pre:prerequisites)
        {
            gra.get(pre[1]).add(pre[0]);///建立先修关系,返回一个新的先修课程的二维数组[[1],[2],[]]
        }
        //设计一个数组,表示当前点的元素是已访问过
        int[] visited=new int[numCourses];// 所有课程初始状态都是 0(未访问)



        //3.遍历所有课程,检查是否有环
        for(int i=0;i<numCourses;i++)
        {
            if(dfs(gra,visited,i))
            {
                return false;
            }
        }
        return true;
    }

        //4.写个递归调用,用来遍历课程。
        //0: 未访问(Not visited)——该节点尚未被访问,或者它的所有邻居都已经被遍历过。
        //1: 访问中(Visiting)——该节点正在被访问,或者它位于当前递归路径上。这意味着我们已经进入这个节点,但它的所有邻居尚未被访问。
        //2: 已访问(Visited)——该节点已经被完全遍历过,即它的所有邻居已经访问过,且没有发现环。

         private boolean dfs(List<List<Integer>> gra, int[] visited, int course) {
            if(visited[course]==1)
            return true;
            if(visited[course]==2)
            return false;// 该课程已检查过,无环

            // 进入递归,标记为“访问中”
            visited[course]=1;
            for(int next:gra.get(course))//遍历 course 之后的课程(它的直接后继课程)
            {
             if(dfs(gra,visited,next))
             {
                return true;
             }
            } 
          // 递归结束,标记为“已完成”
           visited[course] = 2;// 【回溯】标记当前课程检查完毕,后续递归不会再访问它
            return false;// 没有发现环,返回 false

         }
           
    
}

相关文章:

  • Java面试黄金宝典25
  • 51单片机的五类指令(五)——位操作类指令
  • 身份证信息查询API:精准识别身份证号码
  • 操作系统高频(五)linux命令
  • 【小也的Java之旅系列】02 分布式集群详解
  • 经典算法Golang实现
  • 【含文档+PPT+源码】基于微信小程序的社交摄影约拍平台的设计与实现
  • python 语言始终是中文
  • 论文笔记(七十五)Auto-Encoding Variational Bayes
  • vue父子周期解决问题
  • Dubbo分布式框架学习(2)
  • Cursor:AI 驱动的编程变革者
  • JavaScript性能优化实践:从微观加速到系统级策略
  • 【数据分享】中国3254座水库集水区特征数据集(免费获取)
  • C++11QT复习 (七)
  • MySQL中的函数(字符串,数值,日期,流程)以及部分案例
  • A股复权计算_权息数据整理代码
  • 自适应二值化与形态学变换在图像颜色识别与替换中的应用解析
  • .Net中的流处理类总结 Stream/FileStream/MemoryStream/NetworkStream/StreamReader
  • 04-深入解析 Spring 事务管理原理及源码
  • 河南信阳拟发文严控预售许可条件:新出让土地开发的商品房一律现房销售
  • 俄土外长通话讨论俄乌谈判问题
  • 第二期人工智能能力建设研讨班在京开班,近40国和区域组织代表参加
  • 5.19中国旅游日,上海56家景区景点限时门票半价
  • 1至4月全国铁路完成固定资产投资1947亿元,同比增长5.3%
  • 未来之城湖州,正在书写怎样的城市未来