你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。

在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:[0,1]

给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习?

示例 1:

输入: 2, [[1,0]]
输出: true
解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。

DFS代码

class Solution {boolean[] finished;public boolean canFinish(int numCourses, int[][] prerequisites) {finished=new boolean[numCourses];HashMap<Integer,List<Integer>> map=new HashMap<>();//记录课程学完后可以学习的课程HashMap<Integer,HashSet<Integer>> map2=new HashMap<>();//记录需要先修的课程for(int i=0;i<numCourses;i++)//创建邻接表{map.put(i,new ArrayList<>());map2.put(i,new HashSet<>());}for(int[] pre:prerequisites){map.get(pre[1]).add(pre[0]);map2.get(pre[0]).add(pre[1]);}for(int i=0;i<numCourses;i++)Finish(i,map,map2);for(int i=0;i<numCourses;i++)//检查是不是全部学完了if(!finished[i]) return false;return true;}public void Finish(int cur,HashMap<Integer,List<Integer>> map, HashMap<Integer,HashSet<Integer>> map2) {//深度优先搜索if(!map2.get(cur).isEmpty()) return;finished[cur]=true;for(int next:map.get(cur)){map2.get(next).remove(cur);Finish(next,map,map2);}}
}

BFS代码

    public boolean canFinish(int numCourses, int[][] prerequisites) {Queue<Integer> queue=new LinkedList<>();int[] adj=new int[numCourses];Map<Integer,Set<Integer>> pre=new HashMap<>();for(int i=0;i<numCourses;i++)pre.put(i,new HashSet<>());for(int[] t:prerequisites){pre.get(t[1]).add(t[0]);//邻接表adj[t[0]]++;//记录节点的入度}for(int i=0;i<numCourses;i++)//入度为0的节点入队if(adj[i]==0) queue.add(i);while (!queue.isEmpty()){int cur=queue.poll();for(int c:pre.get(cur))//相邻节点入度减1{if(--adj[c]==0) queue.offer(c);//入度为0的节点入队}}for(int i=0;i<numCourses;i++)if(adj[i]>0) return false;//还存在不能消除的边return true;}

leetcode207. 课程表(dfs/bfs)相关推荐

  1. 20天拿下华为OD笔试之【DFS/BFS】2023Q1A-开心消消乐【闭着眼睛学数理化】全网注释最详细分类最全的华为OD真题题解

    [DFS/BFS]2023Q1A-开心消消乐 题目描述与示例 题目描述 给定一个 N 行 M 列的二维矩阵,矩阵中每个位置的数字取值为 0 或 1,矩阵示例如: 1 1 0 0 0 0 0 1 0 0 ...

  2. 【限时免费】20天拿下华为OD笔试之【DFS/BFS】2023B-寻找最大价值的矿堆【闭着眼睛学数理化】全网注释最详细分类最全的华为OD真题题解

    [DFS/BFS]2023B-寻找最大价值的矿堆 题目描述与示例 给你一个由 '0'(空地).'1'(银矿).'2'(金矿)组成的的地图,矿堆只能由上下左右相邻的金矿或银矿连接形成.超出地图范围可以认 ...

  3. 【DFS/BFS】NYOJ-58-最少步数(迷宫最短路径问题)

    [题目链接:NYOJ-58] 经典的搜索问题,想必这题用广搜的会比较多,所以我首先使的也是广搜,但其实深搜同样也是可以的. 不考虑剪枝的话,两种方法实践消耗相同,但是深搜相比广搜内存低一点. 我想,因 ...

  4. POJ2308连连看dfs+bfs+优化

    DFS+BFS+MAP+剪枝 题意:       就是给你一个10*10的连连看状态,然后问你最后能不能全部消没? 思路:      首先要明确这是一个搜索题目,还有就是关键的一点就是连连看这个游戏是 ...

  5. 链式前向星模板 建图+dfs+bfs+dijkstra

    边没有用struct封装起来,节点和边的计数起点如果不符合习惯可以稍作修改 建图+DFS+BFS #include <cstdio> #include <cstring> #i ...

  6. 算法 - DFS/BFS

    DFS函数大概率会传递"位置信息",根据位置信息获取下一步的选择,(大部分是在循环中)选择.执行.回退 例如N皇后的 棋盘位置(x, y),组合问题的 idx DFS函数的目的是, ...

  7. [Leetcode][第130题][JAVA][被围绕的区域][DFS][BFS]

    [问题描述][中等] [解答思路] 1. 深度优先搜索 使用深度优先搜索实现标记操作.在下面的代码中,我们把标记过的字母 O 修改为字母 A. 复杂度 class Solution {int[] dx ...

  8. 1.5万字详述 | 全开源:python写小游戏+AI强化学习与传统DFS/BFS控制分别实现

    简介:本周的强化学习我们来到实践部分.我以我在 GitHub 上开源的项目 PiperLiu / Amazing-Brick-DFS-and-DRL 为对象,从零开始与各位朋友分享:如何用 pytho ...

  9. java bfs dfs_java优先搜索(DFS/BFS)实际应用

    深度优先搜索DFS即Depth First Search.其过程简要来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次.广度优先搜索BFS是Breadth First Sear ...

  10. 洛谷 P1710 地铁涨价 (dfs+bfs)

    地铁涨价 题目描述 博艾市除了有海底高铁连接中国大陆.台湾与日本,市区里也有很成熟的轨道交通系统.我们可以认为博艾地铁系统是一个无向连通图.博艾有N个地铁站,同时有M小段地铁连接两个不同的站. 地铁计 ...

最新文章

  1. 网络设置计算机,怎么重置电脑网络设置
  2. 读书笔记之《习惯的力量》
  3. Perl中的单行凝视和多行凝视
  4. C#-微信公众平台接口-上传临时素材
  5. java 队列的数组_JAVA-循环数组实现简单的队列
  6. LeetCode 1049. 最后一块石头的重量 II
  7. Lambda表达式的注意事项【理解】
  8. iWiscloud智慧家居控制中心
  9. [Jinkey 原创]震惊!iOS 系统居然自带悬浮窗口调试工具
  10. 华为鸿蒙发布2.0,华为做到了!鸿蒙2.0正式发布,苹果安卓有危机?
  11. android numberpicker,NumberPicker实现滑动选择
  12. 【李宏毅2020 ML/DL】P56 Transformer and its variant | New Architecture
  13. 纵向合并gridview单元格的两种方法
  14. OpenCV中对Mat里面depth,dims,channels,step,data,elemSize和数据地址计算的理解
  15. QTP/UFT11.5官方下载与安装教程及汉化
  16. qq android 哪个版本好用吗,Android QQ轻聊版好用吗?
  17. android 重装系统,如何用手机给电脑重装系统
  18. Elastic Weight Consolidation(EWC) for Life long Learning
  19. activity已经销毁判断
  20. 血淋淋的经验!2021做亚马逊测评是搭上末班车?还是成为新韭菜?

热门文章

  1. 300. 最长上升子序列
  2. java编写斐波那契数列,实战案例
  3. CSS的三种定位,月薪30K
  4. java client_java中HttpClient的使用
  5. react事件处理函数中绑定this的bind()函数
  6. Oracle的JDBC Url的几种方式
  7. 判断两个树是否互相镜像
  8. sqlite 字符串 转 整型 cast 函数 (强制类型转换 )
  9. poj2975——Caesar密码
  10. fastjson反序列化漏洞原理及利用