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

图论① dfs | Java | LeetCode 797,Kama 98 邻接表实现(未完成)

797 所有可能路径

https://leetcode.cn/problems/all-paths-from-source-to-target/description/
输入:graph = [[1,2],[3],[3],[]]

题目分析,这里

class Solution {//这个不是二维数组,而是listList<List<Integer>> res = new ArrayList<List<Integer>>();List<Integer> path = new ArrayList<>();public List<List<Integer>> allPathsSourceTarget(int[][] graph) {path.add(0);dfs(graph, 0);return res;}public void dfs(int graph[][], int x) {if(x == graph.length-1) { //横向的所有节点res.add(new ArrayList<>(path));return;}//列for(int i=0; i<graph[x].length; i++) {path.add(graph[x][i]);dfs(graph, graph[x][i]);path.remove(path.size()-1);}}
}

Kama 98

题目链接 https://kamacoder.com/problempage.php?pid=1170

邻接矩阵实现

import java.util.*;public class Main {static List<List<Integer>> res = new ArrayList<List<Integer>>();static List<Integer> path = new ArrayList<Integer>();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];//这个for循环for(int i=0; i<M; i++) {int s = sc.nextInt();int t = sc.nextInt();graph[s][t] = 1;}path.add(1);dfs(graph, 1);if (res.isEmpty()) System.out.println(-1);for (List<Integer> pa : res) {for (int i = 0; i < pa.size() - 1; i++) {System.out.print(pa.get(i) + " ");}System.out.println(pa.get(pa.size() - 1));}}public static void dfs(int[][]graph, int x) {//节点个数int n = graph.length-1;if(x == n) {res.add(new ArrayList<>(path));return;}for(int i=1; i<=n; i++) {if(graph[x][i] == 1) {path.add(i);dfs(graph ,i);path.remove(path.size()-1);}}}
}

出错点

1 与力扣上的题目不一样,首先需要自己设置输入输出

输入的时候,这里for循环是因为告知了有多少条有向边

for(int i=0; i<M; i++) {int s = sc.nextInt();int t = sc.nextInt();graph[s][t] = 1;
}

2 力扣直接给出了图 int graph[][],而且输入样例中 输入:graph = [[1,2],[3],[3],[]],直接表明这个二维数组不是 n×n 的,因此graph.length获得节点的个数,graph[index].length获得以节点index为起点 的边的总数,

  • 力扣797
    在这里插入图片描述

  • 对比:在卡玛98题中,我们在用邻接矩阵创建图的时候,graph是n×n的:int[][]graph = new int[N+1][N+1];。因此在回溯(DFS)的时候,for循环条件不一样,也要多一个if判断
    在这里插入图片描述

3 static的使用,在Kama的ACM模式下 public static void main(String[] args)是入口函数,直接运行了,因此这里定义的函数和变量都需要用 static描述,否则必须要先实例化类Main才能调用函数
在这里插入图片描述

4 Kama的输出:遍历 List<List<Integer>> res

if (res.isEmpty()) System.out.println(-1);for (List<Integer> pa : res) {for (int i = 0; i < pa.size() - 1; i++) {System.out.print(pa.get(i) + " ");}System.out.println(pa.get(pa.size() - 1));}

邻接表实现(未完成)

LinkedList

链表是一种常见的数据结构,用于存储和组织数据。它由一系列节点(Node)组成,每个节点包含两个主要部分:数据域(Data)和指针域(Pointer)。

数据域存储节点所需的数据或信息,可以是任意类型的数据,如整数、字符、对象等。指针域则指向链表中的下一个节点,将节点连接起来形成链表结构。

链表中的节点并不一定按照物理上的连续位置存储,而是通过指针域相互连接。这使得链表能够灵活地插入、删除和修改节点,而无需像数组那样进行元素的移动。

链表的优点是可以高效地插入和删除节点,而无需移动其他节点。然而,由于链表中的节点不是连续存储的,访问特定位置的节点需要从头部开始遍历,因此随机访问的效率较低。

在Java中,LinkedList(链表)是Java集合框架提供的一个实现了List接口的类。它是基于双向链表结构实现的,可以用于存储和操作元素的有序集合。

【Java】链表LinkedList

LinkedList和ArrayList是Java集合框架中的两种不同的List实现。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 自动气象站:高度自动化、智能化和精准化
  • Ubuntu配置Ngbatis学习环境
  • C++适配器
  • golang国内proxy设置
  • 【每日一题】【枚举】【估计时间复杂度】[蓝桥杯 2024 省 B] 好数 C++
  • 【Python 逆向滑块】(实战五)逆向滑块,并实现用Python+Node.js 生成滑块、识别滑块、验证滑块、发送短信
  • Java 设计模式之单例模式
  • 如何从智联招聘网站快速抓取职位详情?两大技巧揭秘
  • 【Linux修行路】进度条小程序
  • Java处理大数据的技巧
  • 使用VM安装K8S
  • 电路原理分析
  • 科普文:微服务之Spring Cloud Alibaba消息队列组件RocketMQ工作原理
  • 树模型详解3-xgboost
  • Elasticsearch的DSL查询,分组后排序,并查询组数量
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • CSS盒模型深入
  • Flex布局到底解决了什么问题
  • gops —— Go 程序诊断分析工具
  • HTML中设置input等文本框为不可操作
  • HTTP那些事
  • If…else
  • Kibana配置logstash,报表一体化
  • MYSQL 的 IF 函数
  • Odoo domain写法及运用
  • spring学习第二天
  • thinkphp5.1 easywechat4 微信第三方开放平台
  • 聊聊redis的数据结构的应用
  • 如何编写一个可升级的智能合约
  • 微信小程序--------语音识别(前端自己也能玩)
  • HanLP分词命名实体提取详解
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #WEB前端(HTML属性)
  • (16)Reactor的测试——响应式Spring的道法术器
  • (21)起落架/可伸缩相机支架
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (阿里云万网)-域名注册购买实名流程
  • (二刷)代码随想录第15天|层序遍历 226.翻转二叉树 101.对称二叉树2
  • (分布式缓存)Redis分片集群
  • (一)u-boot-nand.bin的下载
  • (转)为C# Windows服务添加安装程序
  • (轉貼) UML中文FAQ (OO) (UML)
  • . Flume面试题
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net SqlSugarHelper
  • .NET 事件模型教程(二)
  • .NET/ASP.NETMVC 大型站点架构设计—迁移Model元数据设置项(自定义元数据提供程序)...
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .net反编译工具