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

拓扑排序--算法题

一. 题目

题目链接
在这里插入图片描述

二. 原理

拓扑排序的算法原理----多源BFS
在这里插入图片描述
数据结构是没有规定的, 根据需求选择即可, 一般为Map<Integer, List<Integer>> edges = new HashMap<>();
建图的同时, 统计入度情况

三. 代码

import java.util.*;
import java.io.*;public class Main {public static PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));public static Read in = new Read();public static void main(String[] args) throws IOException{int n = in.nextInt();int m = in.nextInt();int[] cnt = new int[n + 1];//统计入度, 下标表示点, 数值表示个数//建图Map<Integer, List<Integer>> edges = new HashMap<>();for(int i = 0; i < m; i++){int a = in.nextInt(), b = in.nextInt();if(!edges.containsKey(a)){edges.put(a, new ArrayList<>());}edges.get(a).add(b);cnt[b]++;}//拓扑排序Queue<Integer> queue = new LinkedList<>();for(int i = 1; i <= n; i++){if(cnt[i] == 0){queue.add(i);}}int[] res = new int[n];int pos = 0;while(!queue.isEmpty()){int tmp = queue.poll();res[pos++] = tmp;for(int a : edges.getOrDefault(tmp, new ArrayList<>())){//遍历map中tmp对应list的每一个数cnt[a]--;if(cnt[a] == 0){queue.add(a);}}}if(pos == n){for(int i = 0; i < pos - 1; i++){out.print(res[i] + " ");}out.print(res[pos - 1]);}else{out.println(-1);}out.close();}}class Read {StringTokenizer st = new StringTokenizer("");BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));String next() throws IOException {while (!st.hasMoreTokens()) {st = new StringTokenizer(bf.readLine());}return st.nextToken();}String nextLine() throws IOException {return bf.readLine();}int nextInt() throws IOException {return Integer.parseInt(next());}long nextLong() throws IOException {return Long.parseLong(next());}Double nextDouble() throws IOException {return Double.parseDouble(next());}
}

文章转载自:

http://364lYE6e.mygyd.cn
http://5gYH2g2L.mygyd.cn
http://jXloSfCk.mygyd.cn
http://lWhm42BX.mygyd.cn
http://TdBuhWAZ.mygyd.cn
http://ebrFjKgq.mygyd.cn
http://ZyvtUDGP.mygyd.cn
http://t1li47XI.mygyd.cn
http://NtA7DO1b.mygyd.cn
http://mU0kUBcc.mygyd.cn
http://Kj2CloMf.mygyd.cn
http://ZoqcjXNM.mygyd.cn
http://AyQch2I8.mygyd.cn
http://fQj9G9Vw.mygyd.cn
http://XpbYpn8h.mygyd.cn
http://SA5LTwbA.mygyd.cn
http://RcwHi0z2.mygyd.cn
http://QevH02yl.mygyd.cn
http://297UQRrb.mygyd.cn
http://eykmTseY.mygyd.cn
http://mCfoIoB8.mygyd.cn
http://EhrrgxHK.mygyd.cn
http://ruoQjrOz.mygyd.cn
http://3tDX7nny.mygyd.cn
http://yaFO2BkX.mygyd.cn
http://IiMphHiD.mygyd.cn
http://BnLUlLO1.mygyd.cn
http://5Waat4pq.mygyd.cn
http://BD3T6EL7.mygyd.cn
http://7kSLOZHG.mygyd.cn
http://www.dtcms.com/a/381240.html

相关文章:

  • transformer 相对位置编码详解
  • 【学习K230-例程20】GT6700-TCP-Server
  • 一文理清合同金额、已确认金额、累计开票金额、最大可开票金额、未票应收金额之间的关系
  • 复杂任务拆解艺术:如何通过多次对话与提示词工程高效解决难题
  • 函数(其实写文章是为了体验和练习LateX公式)
  • 盒子模型导读
  • 《动物营养与饲料学》复习题五套(含答案)
  • 如何选择?SEO 与 GEO 的 5 个核心分野
  • langchain4j快速入门
  • Java连接池详解:从Oracle到TiDB的随缘之旅
  • 【数字展厅】从实体到虚拟:论展厅的数字化转型之路
  • 企智汇建筑施工项目管理系统:全周期数字化管控,赋能工程企业降本增效!​建筑工程项目管理软件!建筑工程项目管理系统!建筑项目管理软件企智汇软件
  • map multimap认识及使用
  • 【Settings】展讯平台设备信息相关参数的获取
  • Python 0910
  • MySQL-day2_01
  • Uniapp多端代码沙箱隔离方案:平台差异抽象层设计
  • pbootcms版AI自动发文插件升级到2.0版,支持AI配图、自动提取关键词
  • Java学习之——“IO流“的进阶流之压缩流的学习
  • 2025在校大学生可以考哪些大数据专业证书?
  • cte功能oracle与pg执行模式对比
  • 铁路轨道扣件破损视觉检测方案
  • 解释一下C++中内存屏障和它的作用——多线程编程
  • 文献速递 | 徐国良/邵振/陈辉合作揭示DNA甲基化抑制性别决定区的减数分裂重组
  • 如何让 RAG 的检索精准度提升 80%?
  • 镀锌板数控矫平机科普
  • 日志的查看与管理
  • Redis + MySQL 的缓存一致性
  • 2025最新中文字体下载免费网站整理,商用无版权风险!
  • Flutter 数据存储的四种核心方式 · 从 SharedPreferences 到 SQLite:Flutter 数据持久化终极整理