代码随想录Day67(图论 part04)

110.字符串接龙

题目:110. 字符串接龙 (kamacoder.com)

思路:没有思路

答案
import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();String beginStr = scanner.next();String endStr = scanner.next();Set<String> strSet = new HashSet<>();for (int i = 0; i < n; i++) {strSet.add(scanner.next());}System.out.println(findShortestTransformation(beginStr, endStr, strSet));}private static int findShortestTransformation(String beginStr, String endStr, Set<String> strSet) {// 记录strSet里的字符串是否被访问过,同时记录路径长度Map<String, Integer> visitMap = new HashMap<>();// 初始化队列Queue<String> queue = new LinkedList<>();queue.add(beginStr);// 初始化visitMapvisitMap.put(beginStr, 1);while (!queue.isEmpty()) {String word = queue.poll();int pathLength = visitMap.get(word); // 这个字符串在路径中的长度// 开始在这个str中,挨个字符去替换for (int i = 0; i < word.length(); i++) {char[] newWordArray = word.toCharArray();// 遍历26个字母for (char j = 'a'; j <= 'z'; j++) {newWordArray[i] = j;String newWord = new String(newWordArray);if (newWord.equals(endStr)) { // 发现替换字母后,字符串与终点字符串相同return pathLength + 1; // 找到了路径}// 字符串集合里出现了newWord,并且newWord没有被访问过if (strSet.contains(newWord) && !visitMap.containsKey(newWord)) {// 添加访问信息,并将新字符串放到队列中visitMap.put(newWord, pathLength + 1);queue.add(newWord);}}}}// 没找到输出0return 0;}
}
小结
  • 使用  Set<String>   存储字符串
  • 使用  Map<String, Integer>  记录是否访问过,以及路径长度
  • 通过queue来存储遍历过的字符串,从beginStr开始,每次替换一个字符,要是替换后的字符串存在于set中,就将该字符串记录为已访问,并将字符串放入到queue中

105.有向图的完全可达性

题目:105. 有向图的完全可达性 (kamacoder.com)

思路:从1出发,进行深搜,走完所有路径,看是否能够到达所有节点

尝试(运行出错)
import java.util.*;public class Main {private static List<List<Integer>> adjList;private static List<List<Integer>> allPaths;private static int target;public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();int m = scanner.nextInt();adjList = new ArrayList<>();for (int i = 0; i < n + 1; i++) {adjList.add(new ArrayList<>());}for (int i = 0; i < m; i++) {int s = scanner.nextInt();int t = scanner.nextInt();adjList.get(s).add(t);}for(int i =2; i<=n; i++){target = i;allPaths = new ArrayList<>();List<Integer> currentPath = new ArrayList<>();currentPath.add(1);findAllPaths(1, currentPath);if(allPaths.isEmpty()){System.out.println("-1");}}System.out.println("1");scanner.close();}private static void findAllPaths(int currentNode, List<Integer> currentPath) {if (currentNode == target) {allPaths.add(new ArrayList<>(currentPath));return;}for (int nextNode : adjList.get(currentNode)) {currentPath.add(nextNode);findAllPaths(nextNode, currentPath);currentPath.remove(currentPath.size() - 1);}}}
答案
import java.util.*;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 节点数量int m = scanner.nextInt(); // 边的数量// 节点编号从1到n,所以申请 n+1 这么大的数组List<List<Integer>> graph = new ArrayList<>(n + 1);for (int i = 0; i <= n; i++) {graph.add(new ArrayList<>());}// 读取边的信息并构建邻接表for (int i = 0; i < m; i++) {int s = scanner.nextInt();int t = scanner.nextInt();graph.get(s).add(t);}// 初始化访问数组boolean[] visited = new boolean[n + 1];dfs(graph, 1, visited);// 检查是否所有节点都被访问到了for (int i = 1; i <= n; i++) {if (!visited[i]) {System.out.println(-1);return;}}System.out.println(1);}private static void dfs(List<List<Integer>> graph, int node, boolean[] visited) {if (visited[node]) {return;}visited[node] = true;for (int neighbor : graph.get(node)) {dfs(graph, neighbor, visited);}}
}
小结

通过递归, 把所有路径跑一遍, 之后再检查是否所有的节点都有被访问到, 此处不需要回溯

106.岛屿的周长

题目:106. 岛屿的周长 (kamacoder.com)

思路:逐个遍历1,计算每个1跟临近的0所形成的边界,加起来,就是周长

尝试(示例输出正确,提交后输出错误)
import java.util.*;class Main{public static int n;public static int m;public static int[][] grid;public static void main(String[] args){Scanner scanner = new Scanner(System.in);n = scanner.nextInt();m = scanner.nextInt();grid = new int[n][m];for(int i=0; i<n; i++){for(int j=0; j<m; j++){grid[i][j] = scanner.nextInt();   }}int maxArea = 0;for(int i=0; i<n; i++){for(int j=0; j<m; j++){maxArea+=count(i,j);   }}System.out.println(maxArea);}public static int count(int i,int j){if(grid[i][j]!=1) return 0;int len = 0;if(grid[i-1][j]==0){len++;}if(grid[i+1][j]==0){len++;}if(grid[i][j-1]==0){len++;}if(grid[i][j+1]==0){len++;}return len;}
}
答案
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt(); // 行数int m = scanner.nextInt(); // 列数int[][] grid = new int[n][m];for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {grid[i][j] = scanner.nextInt();}}int landCount = 0; // 陆地数量int neighborCount = 0; // 相邻陆地的数量for (int i = 0; i < n; i++) {for (int j = 0; j < m; j++) {if (grid[i][j] == 1) {landCount++; // 统计总的陆地数量// 统计上边相邻陆地if (i - 1 >= 0 && grid[i - 1][j] == 1) neighborCount++;// 统计左边相邻陆地if (j - 1 >= 0 && grid[i][j - 1] == 1) neighborCount++;// 下边和右边的相邻陆地不统计是为了避免重复计算}}}// 计算岛屿的周长int perimeter = landCount * 4 - neighborCount * 2;System.out.println(perimeter);}
}
小结

注意每次只统计上边和左边的相邻陆地

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为手机怎么打印文件?

关于华为手机打印的问题&#xff0c;如果您有打印机&#xff0c;并且已经成功和华为手机相连&#xff0c;在解决上就要容易很多。 具体操作如下&#xff1a; 选择文件 文件来源&#xff1a;华为手机上的文件可以来自多个应用&#xff0c;如图库、备忘录、文件管理等&#xf…

20240628模拟赛总结

cf好了 让我们开始 T1 Two Regular Polygons 判断能不能构造出题中要求的正多边形 关键是n%m0 Two Regular Polygons #include<bits/stdc.h> using namespace std; int t; int n,m; int main() {cin>>t;for(int i1;i<t;i){cin>>n>>m;if(n%m0)co…

MySQL——事务ACID原则、脏读、不可重复读、幻读

什么是事务 要么都成功&#xff0c;要么都失败 一一一一一一一 1. SQL执行&#xff1a;A给B转账 A 1000 ---->200 B 200 2. SQL执行&#xff1a;B收到A的钱 A 800 B 400 一一一一一一一 将一组SQL放在一个批次中去执行~ 事务原则&#xff1a;ACI…

学习笔记(linux高级编程)10

IPC 进程间通信 interprocess communicate 三大类&#xff1a; 1、古老的通信方式 无名管道 有名管道 信号 2、IPC对象通信 system v BSD suse fedora kernel.org 消息队列(用的相对少&#xff0c;这里不讨论) 共享内存 信号量集 3、socket通信 网络通信 特…

TF/IDF算法

第1关&#xff1a;去除停用词 任务描述 本关任务&#xff1a;根据本关所学有关停用词的知识&#xff0c;编写使用停用词表去除停用词的程序并通过测试用例。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a; 停用词的意义&#xff1b; 去除停用词的步骤。 …

浅谈Web性能测试(原创)

一、性能测试不是什么高技术的活&#xff1a; 说到性能测试&#xff0c;很多工作时间较短的新同事或者应届生就很害怕。 为什么害怕&#xff0c;因为感觉无从下手&#xff0c;不知道该做什么、怎么做、做到什么程度&#xff1f; 一听性能测试首先想到的是各种专业的性能测试…

ThingsKit物联网平台功能解析

随着物联网技术的飞速发展&#xff0c;各种物联网平台应运而生&#xff0c;为设备管理和数据集成提供了强大的支持。ThingsKit物联网平台以其全面的功能和灵活的配置&#xff0c;成为行业中的一大亮点。本文将详细解析ThingsKit物联网平台的功能清单&#xff0c;带您深入了解该…

oracle数据库默认表空间详解

文章目录 oracle数据库默认表空间列表 oracle数据库默认表空间列表 系统表空间&#xff08;System Tablespace&#xff09; 系统表空间包含了系统级别的元数据&#xff0c;如数据字典、系统表和存储过程等。例如SYSTEM表空间用于保存数据库的数据字典、PL/SQL程序的源代码和解释…

【C语言】分支(选择)和循环语句

目录 简述选择语句简述if语句单if结构语法格式 if-else结构语法结构 语法结构 循环结构break和continuewhile循环语法结构 for循环语法结构 do while循环语法结构 简述 在c语言中分支和循环语句是极其重要的&#xff0c;就像生活中你难免要做一些判断和循环往复做一些事。 选…

SpringBoot 中的参数校验:构建健壮应用的基石

前言 在开发Web应用时&#xff0c;处理用户输入是不可避免的一环。然而&#xff0c;用户输入往往充满不确定性&#xff0c;可能是格式不正确、类型不匹配&#xff0c;甚至包含恶意内容。为了确保应用的稳定性和安全性&#xff0c;对输入参数进行有效校验显得尤为重要。Spring …

【触想智能】工业平板电脑在新能源领域上的应用分析

工业平板电脑是一种具有高性能和稳定性的计算机设备&#xff0c;适用于在恶劣环境下进行数据采集、运营管理和现场操作。 随着新能源技术的快速发展&#xff0c;工业平板电脑不断地得到应用&#xff0c;并且已成为新能源领域中的重要工具之一。本文将从四个方面探讨工业平板电脑…

WSO2 products 文件上传漏洞(CVE-2022-29464)

前言 CVE-2022-29464 是一个影响多个 WSO2 产品的严重远程代码执行&#xff08;RCE&#xff09;漏洞。这些产品包括 WSO2 API Manager、WSO2 Identity Server 和 WSO2 Enterprise Integrator 等。由于用户输入验证不当&#xff0c;该漏洞允许未经身份验证的攻击者在服务器上上…

代码随想录算法训练营第九天|151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串

打卡Day9 1.151.翻转字符串里的单词2.右旋字符串3.28. 实现 strStr()4.459.重复的子字符串 1.151.翻转字符串里的单词 题目链接&#xff1a;翻转字符串里的单词 文档讲解&#xff1a; 代码随想录 思路&#xff1a;首先&#xff0c;移除多余的空格&#xff1b;然后&#xff0c…

TensorRT学习(二)TensorRT使用教程(Python版)

本文适合快速了解TensorRT使用的整体流程,具体细节还是建议参考TensorRT的官方文档。 加速原理: 加速原理比较复杂,它将会根据显卡来优化算子,以起到加速作用(如下图所示)。简单的来说,就是类似于你出一个公式1+1+1,而你的显卡支持乘法,直接给你把这个公式优化成了1*…

生成式AI赋能金融信贷:减少信用评分偏差

信用评分在确定谁获得信贷以及以何种条件获得信贷方面发挥着关键作用。然而&#xff0c;尽管这一点很重要&#xff0c;但传统的信用评分系统长期以来一直受到一系列关键问题的困扰——从偏见和歧视&#xff0c;到有限的数据考虑和可扩展性挑战。例如&#xff0c;一项针对美国贷…

【代码随想录】【算法训练营】【第56天】 [卡码98]所有可达路径

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 卡码网。 day 56&#xff0c;周二&#xff0c;继续ding~ 题目详情 [卡码98] 所有可达路径 题目描述 卡码98 所有可达路径 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言…

【JPCS出版,PSESG 2024,8月16-18】2024年电力系统工程与智能电网国际学术会议

2024年电力系统工程与智能电网国际学术会议(PSESG 2024)于2024年8月16-18日在中国北京隆重召开。 会议旨在为从事“电力系统工程”、“智能电网”、“储能技术”等领域的专家学者、工程技术人员、研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xf…

GPT-5即将登场:AI赋能下的未来工作与日常生活新图景

随着OpenAI首席技术官米拉穆拉蒂在近期采访中的明确表态&#xff0c;GPT-5的发布已不再是遥不可及的梦想&#xff0c;而是即将在一年半后与我们见面的现实。这一消息无疑在科技界乃至全社会引发了广泛关注和热烈讨论。从GPT-4到GPT-5的飞跃&#xff0c;被形容为从高中生到博士生…

SpringBoot之内容协商

现象演示 假设有一个需求是根据终端的不同&#xff0c;返回不同形式的数据&#xff0c;比如 PC 端需要以 HTML 格式返回数据&#xff0c;APP、小程序端需要以 JSON 格式返回数据。这时我们是 coding 几个相似的接口&#xff1f;还是在一个接口里面做复杂判断处理&#xff1f;两…