Day50 图论part01

embedded/2024/12/27 8:55:01/

图论理论基础

大家可以在看图论理论基础的时候,很多内容 看不懂,例如也不知道 看完之后 还是不知道 邻接矩阵,邻接表怎么用, 别着急。

理论基础大家先对各个概念有个印象就好,后面在刷题的过程中,每个知识点都会得到巩固。

图论理论基础 | 代码随想录

深搜理论基础

了解一下深搜的原理和过程

深度优先搜索理论基础 | 代码随想录

98. 所有可达路径

代码随想录

方法1:邻接矩阵

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;public class Main{public static List<Integer> path = new ArrayList<>();public static List<List<Integer>> result = new ArrayList<>();public static void main (String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();int[][] graph = new int[n+1][n+1];while(m-- > 0){int s = sc.nextInt();int t = sc.nextInt();graph[s][t] = 1;}path.add(1);dfs(graph, 1, n);if(result.isEmpty()){System.out.println(-1);}for(List<Integer> p : result){for(int i = 0; i < p.size() - 1; i++){System.out.print(p.get(i) + " ");}System.out.println(p.get(p.size() - 1));}}public static void dfs(int[][] graph, int x, int n){//这里n是表示节点数量if(x == n){//这里的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);}}}}

方法2:邻接链表

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;public class Main{public static List<Integer> path = new ArrayList<>();public static List<List<Integer>> result = new ArrayList<>();public static void main (String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int m = sc.nextInt();List<LinkedList<Integer>> graph = new ArrayList<>(n+1);for(int i = 0; i <= n; i++){graph.add(new LinkedList<>());}while(m-- > 0){int s = sc.nextInt();int t = sc.nextInt();graph.get(s).add(t);}path.add(1);dfs(graph, 1, n);if(result.isEmpty()){System.out.println(-1);}for(List<Integer> p : result){for(int i = 0; i < p.size() - 1; i++){System.out.print(p.get(i) + " ");}System.out.println(p.get(p.size() - 1));}}public static void dfs(List<LinkedList<Integer>> graph, int x, int n){//这里n是表示节点数量if(x == n){//这里的n是表示路径的终节点result.add(new ArrayList<>(path));return;}for(int i : graph.get(x)){path.add(i);dfs(graph, i, n);path.remove(path.size() - 1);}}}

总结:

1.本题练习的是ACM模式,所以必须熟悉图的存储方法和结果的输出方法。图的存储方法分为邻接矩阵和邻接链表。邻接矩阵是从节点的角度来表示图,使用二维数组来表示图结构。例如: grid[2][5] = 6,表示 节点 2 连接 节点5 为有向图,节点2 指向 节点5,边的权值为6。如果想表示无向图,即:grid[2][5] = 6,grid[5][2] = 6,表示节点2 与 节点5 相互连通,权值为6。邻接链表一般是通过数组+链表,数组里面就存放节点,链表里面存放的是节点可以连通的节点,也就是边。比如1-3-5 表示的是节点1 指向 节点3 和 节点5,并不是节点1连着3,3后面连着5,这点要搞清楚。 链表一般是通过这种方法创建的List<LinkedList<Integer>> graph = new ArrayList<>(n+1);然后记得LinkedList<Integer>一定要先new 出来,然后在add元素进去。

2.dfs里面的处理逻辑就比较简单了,我们先找到当前节点连通的节点 path.add(i);然后以该连通的节点递归继续就行查找dfs(graph, i, n);直到找到目标节点,然后回溯 path.remove(path.size() - 1);

3.由于题目中说了图中不存在自环,所以起始节点不会被自动加入到路径里面,需要我们手动加入到路径当中。

           

广搜理论基础

广度优先搜索理论基础 | 代码随想录


http://www.ppmy.cn/embedded/149135.html

相关文章

sentinel学习笔记6-限流降级(上)

本文属于sentinel学习笔记系列。网上看到吴就业老师的专栏&#xff0c;写的好值得推荐&#xff0c;我整理的有所删减&#xff0c;推荐看原文。 https://blog.csdn.net/baidu_28523317/category_10400605.html sentinel 实现限流降级、熔断降级、黑白名单限流降级、系统自适应…

Metasploit使用-复现永恒之蓝漏洞

Metasploit使用-复现永恒之蓝漏洞 MSF是渗透测试领域最流行的渗透测试框架&#xff0c;其中msf为总模块&#xff0c;其他均为分支模块。分支模块如下&#xff1a; 辅 助 模 块 (Auxiliary&#xff0c;扫描器)&#xff0c;扫描主机系统&#xff0c;寻找可用漏洞&#xff1b; 渗…

Python Polars快速入门指南:LazyFrames

前文已经介绍了Polars的Dataframe, Contexts 和 Expressions&#xff0c;本文继续介绍Polars的惰性API。惰性API是该库最强大的功能之一&#xff0c;使用惰性API可以设定一系列操作&#xff0c;而无需立即运行它们。相反&#xff0c;这些操作被保存为计算图&#xff0c;只在必要…

连通分量分解【东北大学oj数据结构11-4】C++

编写一个程序&#xff0c;读取 SNS&#xff08;社交网络服务&#xff09;中的关系&#xff0c;并判断给定的用户对通过网络是否彼此可达。 输入 在第一行&#xff0c;给出了两个整数 n 和 m。 n 是 SNS 中的用户数&#xff0c;m 是 SNS 中的关系数。 SNS 中的用户由编号由 0 ~…

使用TimesFM 对车辆销售进行预测

代码功能概述 导入相关包与设置环境变量&#xff1a; 首先导入了如 os、numpy、pandas 等常用的 Python 库&#xff0c;同时设置了一些与特定库&#xff08;如 XLA_PYTHON_CLIENT_PREALLOCATE 和 JAX_PM AP_USE_TENSORSTORE&#xff09;相关的环境变量&#xff0c;用于优化计算…

手机发烫怎么解决?

在当今这个智能手机不离手的时代&#xff0c;手机发烫成了不少人头疼的问题。手机发烫不仅影响使用手感&#xff0c;长期过热还可能损害手机硬件、缩短电池寿命&#xff0c;甚至引发安全隐患。不过别担心&#xff0c;下面这些方法能帮你有效给手机 “降温”。 一、使用习惯方面…

Python自动化测试数据驱动解决数据错误

数据驱动将测试数据和测试行为完全分离&#xff0c;实施数据驱动测试步骤如下&#xff1a; A、编写测试脚本&#xff0c;脚本需要支持从程序对象、文件或者数据库读入测试数据&#xff1b; B、将测试脚本使用的测试数据存入程序对象、文件或者数据库等外部介质中&#xff1b;…

减速机润滑油的选用原则

减速机在投入运行前必须加入适当粘度的润滑油&#xff0c;须使齿轮间摩擦减小&#xff0c;遇高负荷及冲击负荷时&#xff0c;减速机才能充分发挥其机能。那么&#xff0c;应该如何选择减速机的润滑油呢&#xff1f; 1、粘度选择&#xff1a;粘度是齿轮油的一个重要理化指标&…