代码随想录算法训练营 | 图论理论基础,98. 所有可达路径

news/2024/10/22 20:28:50

图论理论基础
1.图的种类:有向图,无向图,加权有向图,加权无向图;2.度:无向图中有几条边连接该节点,该节点就有几度,在有向图中,每个节点有出度和入度;出度:从该节点出发的边的个数;入度:指向该节点边的个数;
3.连通图:在无向图中,任何两个节点都是可以到达的;强连通图:在有向图中,任何两个节点是可以相互到达的;
4.连通分量:在无向图中最大的联通子图;强连通分量:在有向图中极大强连通子图
5.图的构造:邻接表、邻接矩阵 或者用类来表示;
6.邻接矩阵:使用二维数组来表示图结构;邻接矩阵是从节点的角度来表示图,有多少节点就申请多大的二维数组;
7.邻接表:使用数组 + 链表的方式来表示;邻接表是从边的数量来表示图,有多少边才会申请对应大小的链表。
8.dfs,bfs

98. 所有可达路径
题目链接:98. 所有可达路径
文档讲解︰代码随想录(programmercarl.com)
日期:2024-10-22

Java代码如下:

import java.util.*;public class Main {static List<List<Integer>> result = new ArrayList<>(); static List<Integer> path = new ArrayList<>();public static void dfs(int[][] graph, int x, int n) {if (x == n) {result.add(new ArrayList<>(path));return;}for (int i = 1; i <= n; i++) {if (graph[x][i] == 1) {path.add(i);dfs(graph, i, n);path.remove(path.size() - 1);}}}public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();int[][] graph = new int[n + 1][n + 1];for (int i = 0; i < m; i++) {int s = scanner.nextInt();int t = scanner.nextInt();graph[s][t] = 1;}path.add(1); dfs(graph, 1, n); if (result.isEmpty()) System.out.print(-1);for (List<Integer> pa : result) {for (int i = 0; i < pa.size() - 1; i++) {System.out.print(pa.get(i) + " ");}System.out.println(pa.get(pa.size() - 1));}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74788.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

java的三大程序结构

JAVA的三大程序结构 一:顺序结构 程序走上执行到下。 二:选择结构 if单选择结构 if(布尔表达式){ //如果布尔表达式的值为ture则执行{}里的语句块 } public class IfDemo01 {public static void main(String[] args) {//接收键盘输入Scanner scanner = new Scanner(System.…

CSP模拟赛 #42

#40 懒得写了,#41 题目质量过低。A 有 \(n\) 张长度为 \(m\) 的纸条,每张纸条有 \(k_i\) 个位置有小写字母,其他位置透明。你需要合理从上到下排列这些纸条,使得最终在上方看到的字符串为 \(s\),保证对于每个位置,至少一张纸条在该位置有一个字母。给出方案或无解。 \(1\…

markdown转pdf,方法总结

总结使用1. VScode插件Markdown Preview Enhanced。格式是正确的。但是无法批处理和指令处理2. pandoc --pdf-engine=typst。无法导出粗体和斜体需求 markdown格式转为pdf我遇到的: 1. 我现在想把多个八股文文档(GitHub项目里的 scutan90/DeepLearning-500-questions: 深度学…

苦寻多日,终于搞定了地形切片,向大家安利一下这款超简单的免费GIS工具箱

概述 地形切片是将大范围的地形数据分割成小块(切片)进行存储和展示的技术,常用于高效的三维地形可视化和动态加载。在实际操作中,可以通过GISBox等工具进行地形切片处理。今天和大家安利的GISBox 是一个用于GIS模型切片、服务分发的免费GIS工具箱,其中包括了支持地形切片…

历届 CSP 刷题记录

\(\texttt{CSP 2019}\) J 组 \(\texttt{T3}\) 题目传送门 注意到一点:每天卖出纪念品换回的金币可以立即用于购买纪念品,当日购买的纪念品也可以当日卖出换回金币。当然,一直持有纪念品也是可以的。 这告诉我们:在一天内,纪念品就是钱,钱就是纪念品,钱和纪念品没有本质区…

Nacos K8s

Nacos 是 Dynamic Naming and Configuration Service 的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 是构建以服务为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。更多的功能特性介绍请查看 Nacos 概览。 在本文…

RocketMQ - 总结

1. 为什么要使用MQ,使用场景是什么异步 : 减少请求响应时间,实现非核心流程异步化 (架构设计原则,能异步就不要同步) 解耦:屏蔽异构平台的细节,生产者消费者可自行扩展修改系统能力只需遵循消息约束,生产者消费者不受对方影响 流量削峰:消息堆积能力,消息保存在MQ中,…

数据采集作业一

一、用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020)的数据,屏幕打印爬取的大学排名信息点击查看代码 # 目标网址 url = "http://www.shanghairanking.cn/rankings/bcur/2020"# 获取网页内容 response = url…