拓扑排序【学习算法】

news/2024/12/22 2:38:12/

拓扑排序【学习算法】

  • 前言
  • 版权
  • 推荐
  • 拓扑排序
    • 核心思想
    • 207. 课程表
      • 解法一
      • 解法二
  • 最后

前言

2023-9-24 15:32:23

以下内容源自《【学习算法】》
仅供学习交流使用

版权

禁止其他平台发布时删除以下此话
本文首次发布于CSDN平台
作者是CSDN@日星月云
博客主页是https://blog.csdn.net/qq_51625007
禁止其他平台发布时删除以上此话

推荐

拓扑排序

核心思想

就是先找到入度为0的结点

删除它发出的边

继续找入度为0的结点

直到找不到为止

判断剩下有没有结点

207. 课程表

207. 课程表

解法一

class Solution {public boolean canFinish(int numCourses, int[][] prerequisites) {int n=numCourses;HashMap<Integer,ArrayList<Integer>> map=new HashMap<>();for (int i = 0; i < n; i++) {map.putIfAbsent(i,new ArrayList<>());}for(int[] course:prerequisites){map.get(course[0]).add(course[1]);}return topo(map,n);}public boolean topo(HashMap<Integer,ArrayList<Integer>> map,int n){int count=0;Stack<Integer> stack=new Stack<>();for (int i = 0; i < n; i++) {//找到入度为0的点if (map.get(i).size()==0){stack.add(i);}}while (!stack.isEmpty()) {Integer i=stack.pop();for (int j = 0; j < map.size(); j++) {if (map.get(j).contains(i)){map.get(j).remove(i);if (map.get(j).size()==0){stack.add(j);}}}count++;}return count == n;}    
}

解法二

一个入度矩阵 indeg

一个访问变量 visited

class Solution {List<List<Integer>> edges;//有向图int [] indeg;//入度public boolean canFinish(int numCourses, int[][] prerequisites) {edges=new ArrayList<List<Integer>>();for(int i=0;i<numCourses;i++){edges.add(new ArrayList<Integer>());}indeg=new int[numCourses];for(int[] info:prerequisites){edges.get(info[1]).add(info[0]);indeg[info[0]]++;}//拓扑排序Queue<Integer> queue = new LinkedList<Integer>();for(int i=0;i<numCourses;i++){if(indeg[i]==0){queue.offer(i);}}//广度优先搜索int visited=0;while(!queue.isEmpty()){visited++;int u=queue.poll();for(int v:edges.get(u)){indeg[v]--;if(indeg[v]==0){queue.offer(v);}}}return visited==numCourses;}}

最后

2023-9-24 15:45:02

我们都有光明的未来

祝大家考研上岸
祝大家工作顺利
祝大家得偿所愿
祝大家如愿以偿
点赞收藏关注哦


http://www.ppmy.cn/news/1122747.html

相关文章

多进程编程- POSIX无名信号量

基本概念 无名信号量&#xff08;也称为匿名信号量&#xff09;是一个同步原语&#xff0c;通常用于线程之间的同步&#xff0c;而不是进程之间。与命名信号量&#xff08;用于进程间同步&#xff09;相比&#xff0c;无名信号量的生命周期通常受限于创建它的进程&#xff0c;…

35.浅谈贪心算法

概述 相信大家或多或少都对贪心算法有所耳闻&#xff0c;今天我们从一个应用场景展开 假设存在下面需要付费的广播台&#xff0c;以及广播台信号可以覆盖的地区。 如何选择最少的广播台&#xff0c;让所有的地区都可以接收到信号&#xff1f; 广播台覆盖地区k1北京、上海、天津…

wordpress使用category order and taxonomy terms order插件实现分类目录的拖拽排序

文章目录 引入实现效果安装插件使用插件 引入 使用docker快速搭建wordpress服务&#xff0c;并指定域名访问 上一节我们使用docker快速搭建了wordpress服务&#xff0c;可以看到基础的wordpress服务已经集成基础的用户管理、文章发布、页面编辑、文章分类等功能&#xff0c;但…

C++ -- 类型转换

目录 C语言中的类型转换 为什么C需要四种类型转换 C 类型转换 static_cast reinterpret_cast const_cast 添加关键字 volatile dynamic_cast 补充 RTTI 总结 C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型…

华为OD机试真题-会议接待-2023年OD统一考试(B卷)

题目描述: 某组织举行会议,来了多个代表团同时到达,接待处只有一辆汽车,可以同时接待多个代表团,为了提高车辆利用率,请帮接待员计算可以坐满车的接待方案,输出方案数量。 约束: 1、一个团只能上一辆车,并且代表团人数(代表团数量小于30,每个代表团人数小于30)小于…

SpringCloud Alibaba 入门到精通 - Sentinel

SpringCloud Alibaba 入门到精通 - Sentinel 一、基础结构搭建1.父工程创建2.子工程创建 二、Sentinel的整合SpringCloud1.微服务可能存在的问题2.SpringCloud集成Sentinel搭建Dashboard3 SpringCloud 整合Sentinel 三、服务降级1 服务降级-Sentinel2 Sentinel 整合 OpenFeign3…

安装k8s集群

一、前置环境配置 安装两台centos 实验环境&#xff0c;一台pc配有docker环境&#xff0c;有两个centsos7容器&#xff0c;其中一个容器作为master&#xff0c;一个作为node。如果master与node都是用默认端口&#xff0c;会存在冲突&#xff0c;所以在此基础上做细微的调整。…

秋招面经记录

MySQL 9.Mysql中有1000万条数据&#xff0c;每次查询10条&#xff0c;该如何优化&#xff08;答&#xff1a;Limit子查询优化&#xff09; 10.有了解过mysql索引吗 11.项目中使用到索引的情况&#xff08;答&#xff1a;覆盖索引&#xff0c;避免回表&#xff09; 12.B树和b…