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

day58 代码随想录算法训练营 图论专题11

1 今日打卡Floyd算法 97. 小明逛公园A*算法 127. 骑士的攻击2 Floyd算法2.1 思路核心原理对于任意两个节点 i 和 j尝试以节点 k 作为中间节点更新 i 到 j 的最短路径即 i - j 的最短路径 min (原 i-j 路径i-k-j 路径)。三层循环逻辑外层循环 k枚举所有可能的中间节点从 1 到 n中层循环 i枚举所有起点内层循环 j枚举所有终点初始化自身到自身的距离为 0代码中未显式写但可补充直接相连的节点距离为输入的边权无直接相连的节点距离设为一个极大值表示不可达。2.2 实现代码import java.util.*; public class Main { public static void main(String[] args) { // 1. 输入处理读取节点数n和边数m Scanner sc new Scanner(System.in); int n sc.nextInt(), m sc.nextInt(); // n节点总数m边的数量 // 2. 初始化三维数组grid[i][j][k] 表示经过前k个中间节点后i到j的最短路径 // 维度说明i(起点)、j(终点)、k(中间节点上限)范围1~n方便节点编号对应 int[][][] grid new int[n 1][n 1][n 1]; for (int i 0; i n; i) { for (int j 0; j n; j) { // 初始化所有路径为极大值10001需大于可能的最大路径和表示初始不可达 Arrays.fill(grid[i][j], 10001); // 补充自身到自身的距离为0原代码遗漏建议添加 if (i j) { grid[i][j][0] 0; } } } // 3. 读取边的信息初始化直接相连的节点路径k0表示无中间节点 for (int i 0; i m; i) { int src sc.nextInt(); // 起点 int dst sc.nextInt(); // 终点 int val sc.nextInt(); // 边权路径长度 // 无向图双向路径都要赋值 grid[src][dst][0] val; grid[dst][src][0] val; } // 4. Floyd核心动态规划更新最短路径 // k枚举中间节点第k个中间节点 for (int k 1; k n; k) { // i枚举所有起点 for (int i 1; i n; i) { // j枚举所有终点 for (int j 1; j n; j) { // 状态转移方程 // 经过前k个中间节点的i-j路径 min(不经过k的路径, 经过k的路径(i-k k-j)) grid[i][j][k] Math.min(grid[i][j][k - 1], grid[i][k][k - 1] grid[k][j][k - 1]); } } } // 5. 处理查询输出指定起点到终点的最短路径 int q sc.nextInt(); // 查询次数 while (q 0) { int start sc.nextInt(); // 查询的起点 int end sc.nextInt(); // 查询的终点 // grid[start][end][n] 表示经过所有n个中间节点后start到end的最短路径 if (grid[start][end][n] 10001) { System.out.println(-1); // 不可达输出-1 } else { System.out.println(grid[start][end][n]); // 输出最短路径长度 } q--; } sc.close(); // 关闭输入流 } }3 A*算法3.1 思路A*A-Star算法是一种启发式搜索算法核心是结合「实际代价G」和「预估代价H」来引导搜索方向相比普通 BFS 能更快找到最优路径适用于最短路径问题如本题的骑士走棋盘核心公式F G HG从起点到当前节点的实际移动代价本题中骑士每走一步G 增加 5对应 “马走日” 的欧氏距离平方12225H从当前节点到终点的预估代价启发函数本题用欧氏距离平方避免开根号提升计算效率F总代价算法优先选择 F 最小的节点扩展能快速逼近终点。核心流程用优先队列最小堆存储待扩展的节点按 F 值从小到大排序每次取出 F 最小的节点扩展其所有合法邻接节点骑士的 8 种走法记录每个节点的实际移动步数直到找到终点。3.2 实现代码import java.util.PriorityQueue; import java.util.Arrays; import java.util.Scanner; // 骑士节点类存储坐标、G/H/F值 class Knight implements ComparableKnight { int x, y; // 坐标 int g, h, f;// G(实际代价)、H(预估代价)、F(总代价) // 构造方法 public Knight(int x, int y, int g, int h) { this.x x; this.y y; this.g g; this.h h; this.f g h; // F G H } // 重写比较器优先队列按F值升序排列F小的先出队 Override public int compareTo(Knight other) { return Integer.compare(this.f, other.f); } } public class Main { // 骑士的8个移动方向马走日 private static final int[][] dir {{-2, -1}, {-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}, {-1, -2}}; // 记录每个位置的移动步数初始为0表示未访问 private static int[][] moves; // 终点坐标全局变量方便启发函数调用 private static int targetX, targetY; // 启发函数计算当前节点到终点的欧氏距离平方不开根号提升效率 private static int heuristic(int x, int y) { int dx x - targetX; int dy y - targetY; return dx * dx dy * dy; } // A* 核心搜索方法 private static void aStar(int startX, int startY) { // 初始化优先队列最小堆按F值升序排列 PriorityQueueKnight queue new PriorityQueue(); // 起点入队G0无移动代价H为起点到终点的预估代价 queue.add(new Knight(startX, startY, 0, heuristic(startX, startY))); // 起点步数记为0 moves[startX][startY] 0; // 开始搜索 while (!queue.isEmpty()) { // 取出F值最小的节点当前最优节点 Knight cur queue.poll(); int curX cur.x; int curY cur.y; // 到达终点直接退出A*找到的第一条路径就是最短路径 if (curX targetX curY targetY) { return; } // 遍历8个移动方向 for (int[] d : dir) { int nextX curX d[0]; int nextY curY d[1]; // 边界检查棋盘范围1~1000 if (nextX 1 || nextX 1000 || nextY 1 || nextY 1000) { continue; } // 未访问过的节点moves为0表示未访问 if (moves[nextX][nextY] 0) { // 记录步数当前步数1每走一步步数1 moves[nextX][nextY] moves[curX][curY] 1; // 计算新节点的G、H、FG当前G5马走日的距离平方 int newG cur.g 5; int newH heuristic(nextX, nextY); // 新节点入队 queue.add(new Knight(nextX, nextY, newG, newH)); } } } } public static void main(String[] args) { Scanner scanner new Scanner(System.in); int n scanner.nextInt(); // 测试用例数 while (n-- 0) { int a1 scanner.nextInt(); // 起点x int a2 scanner.nextInt(); // 起点y targetX scanner.nextInt();// 终点x targetY scanner.nextInt();// 终点y // 初始化步数数组1001*1001适配1~1000的坐标每次用例重置 moves new int[1001][1001]; // 若起点终点直接输出0避免不必要的搜索 if (a1 targetX a2 targetY) { System.out.println(0); continue; } // 执行A*搜索 aStar(a1, a2); // 输出终点的步数 System.out.println(moves[targetX][targetY]); } scanner.close(); } }

相关文章:

day58 代码随想录算法训练营 图论专题11

1 今日打卡 Floyd算法 97. 小明逛公园 A*算法 127. 骑士的攻击 2 Floyd算法 2.1 思路 核心原理:对于任意两个节点 i 和 j,尝试以节点 k 作为中间节点,更新 i 到 j 的最短路径,即 i -> j 的最短路径 min (原 i->j 路径…...

Gemma-3-12B-IT效果展示:看它如何精准生成数据分析脚本

Gemma-3-12B-IT效果展示:看它如何精准生成数据分析脚本 1. 开篇:当数据分析遇上大模型 在日常工作中,数据分析师经常需要编写重复性的数据处理脚本。从数据清洗到特征提取,再到可视化呈现,这些工作虽然逻辑相对固定&…...

StructBERT中文情感分析效果展示:长句、网络用语、歧义句识别案例

StructBERT中文情感分析效果展示:长句、网络用语、歧义句识别案例 获取更多AI镜像 想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支…...

YOLOFuse问题解决:常见报错处理与数据准备注意事项

YOLOFuse问题解决:常见报错处理与数据准备注意事项 1. 引言 在使用YOLOFuse进行多模态目标检测时,很多开发者会遇到各种报错和数据准备问题。本文将聚焦实际工程落地中的常见痛点,帮助您快速解决这些问题。 YOLOFuse作为基于YOLO框架的双流…...

三电平逆变器实战:从建模到双闭环PI参数整定,附S-函数仿真与代码解析

1. 三电平逆变器基础与建模实战 三电平逆变器作为中高压电力电子系统的核心部件,相比传统两电平拓扑具有开关损耗低、谐波含量小等显著优势。我第一次接触T型三电平拓扑时,就被它独特的P/O/N三种开关状态所吸引——这种结构通过在直流母线中引入中性点&a…...

Qwen-Image定制镜像惊艳案例:Qwen-VL对电路板图元器件识别与故障推测

Qwen-Image定制镜像惊艳案例:Qwen-VL对电路板图元器件识别与故障推测 1. 案例背景与价值 在电子制造和维修领域,电路板检测一直是一项耗时且需要专业经验的工作。传统方法依赖工程师肉眼检查电路板上的元器件状态,不仅效率低下,…...

Z-Image-Turbo-辉夜巫女科学可视化:将复杂数据转化为直观信息图

Z-Image-Turbo-辉夜巫女科学可视化:将复杂数据转化为直观信息图 你有没有过这样的经历?面对一堆密密麻麻的数据表格、复杂的公式或者抽象的科学概念,想要把它讲清楚,却苦于找不到一张合适的配图。自己画吧,费时费力&a…...

Realistic Vision V5.1 模型剪枝与量化教程:在低显存GPU上的部署优化

Realistic Vision V5.1 模型剪枝与量化教程:在低显存GPU上的部署优化 你是不是也遇到过这种情况:好不容易找到一个效果惊艳的AI绘画模型,比如Realistic Vision V5.1,结果发现自己的显卡显存不够,根本跑不起来&#xf…...

突破提取码壁垒:baidupankey开源工具全方位应用指南

突破提取码壁垒:baidupankey开源工具全方位应用指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 在数字资源共享日益频繁的今天,提取码机制成为获取百度网盘资源的主要障碍。据行业调研,…...

SD3.5 FP8镜像效果展示:高清质感图片生成作品集,效果惊艳

SD3.5 FP8镜像效果展示:高清质感图片生成作品集,效果惊艳 1. 新一代图像生成标杆 Stable Diffusion 3.5 (SD 3.5) FP8镜像代表了当前文本到图像生成技术的顶尖水平。这个经过优化的版本在保持SD3.5原有强大功能的基础上,通过FP8量化技术实现…...

深度学习项目训练环境生产环境:支持Docker Compose编排训练+推理服务

深度学习项目训练环境生产环境:支持Docker Compose编排训练推理服务 1. 环境概览与核心配置 深度学习项目开发最让人头疼的就是环境配置问题。不同的框架版本、CUDA版本、Python版本之间的兼容性问题,往往让开发者浪费大量时间在环境搭建上&#xff0c…...

嵌入式开发实战:MIPI-DSI与I2C接口在触控屏驱动中的协同工作原理

嵌入式开发实战:MIPI-DSI与I2C接口在触控屏驱动中的协同工作原理 现代嵌入式设备的交互体验高度依赖显示与触控的精准配合。当用户轻触屏幕时,背后是MIPI-DSI显示接口与I2C触控接口的精密协作——前者以每秒Gbps级的速度刷新图像,后者以毫秒级…...

Nanbeige 4.1-3B效果实测:暗色模式切换对像素UI可读性与氛围影响

Nanbeige 4.1-3B效果实测:暗色模式切换对像素UI可读性与氛围影响 1. 项目背景与设计理念 Nanbeige 4.1-3B是一款融合了复古游戏美学与AI对话技术的创新产品。这套"像素冒险聊天终端"专为Nanbeige 4.1-3B大语言模型设计,通过独特的视觉呈现方…...

【GitHub项目推荐--CC Workflow Studio:可视化 AI 工作流编辑器】⭐⭐⭐⭐⭐

简介 CC Workflow Studio 是一个运行在 Visual Studio Code 内的可视化编辑器,专为设计复杂的 AI Agent 工作流而生。它解决了传统文本配置 AI 自动化流程时不够直观、难以调试的问题。通过拖拽式界面,开发者可以轻松构建包含子 Agent 编排、条件分支、…...

LingBot-Depth快速部署:systemd服务管理+自动重启失败容器

LingBot-Depth快速部署:systemd服务管理自动重启失败容器 1. 项目概述 LingBot-Depth是一个基于深度掩码建模的空间感知模型,专门用于将不完整的深度传感器数据转换为高质量的度量级3D测量。这个模型能够处理来自各种深度传感器(如Kinect、…...

Qwen3.5-9B完整指南:多模态token早期融合在Web UI中的实测表现

Qwen3.5-9B完整指南:多模态token早期融合在Web UI中的实测表现 1. 模型概述与核心特性 Qwen3.5-9B作为新一代多模态大模型,在视觉-语言理解领域实现了重大突破。该模型通过创新的架构设计和训练方法,在保持高效推理的同时,显著提…...

RexUniNLU工业启示:为何零样本NLU正成为AI原生应用的默认基础设施

RexUniNLU工业启示:为何零样本NLU正成为AI原生应用的默认基础设施 1. 从零开始理解零样本NLU 想象一下这样的场景:你需要开发一个智能客服系统,但没有任何标注数据;或者你要做一个新的业务场景,但不想花几周时间标注…...

Leather Dress Collection 在软件测试中的应用:自动化测试用例与缺陷报告生成

Leather Dress Collection 在软件测试中的应用:自动化测试用例与缺陷报告生成 最近和几个测试团队的朋友聊天,大家普遍都在头疼同一个问题:测试用例设计太耗时,缺陷报告写得又累又不规范。尤其是面对频繁迭代的产品,测…...

DeepSeek-OCR-2惊艳效果展示:多语言混排文档(中英日)的精准区域分割

DeepSeek-OCR-2惊艳效果展示:多语言混排文档(中英日)的精准区域分割 1. 引言:当文档解析遇见水墨美学 想象一下,你手头有一份复杂的文档——可能是学术论文、产品说明书,或者是会议纪要。这份文档里&…...

Flink 1.16.0与Elasticsearch 8 Connector实战:从Kafka到ES8的完整数据流处理

Flink 1.16.0与Elasticsearch 8 Connector深度实战:构建高可靠Kafka数据管道 实时数据处理已成为现代数据架构的核心需求,而Apache Flink作为流处理引擎的标杆,其与Elasticsearch的深度集成能力直接决定了数据管道的效率与可靠性。本文将带您…...

md2pptx架构解析:重新定义Markdown到PowerPoint的智能转换引擎

md2pptx架构解析:重新定义Markdown到PowerPoint的智能转换引擎 【免费下载链接】md2pptx Markdown To PowerPoint converter 项目地址: https://gitcode.com/gh_mirrors/md/md2pptx 在技术文档与演示文稿的交叉领域,md2pptx以其独特的架构设计和智…...

基于springboot设备管理系统设计与开发(源码+精品论文+答辩PPT等资料)

博主介绍:CSDN毕设辅导第一人、靠谱第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交…...

Audio Pixel Studio惊艳案例:用晓晓音色10分钟生成20分钟有声书全链路

Audio Pixel Studio惊艳案例:用晓晓音色10分钟生成20分钟有声书全链路 1. 引言:语音合成技术的新突破 想象一下这样的场景:你手头有一本10万字的电子书,需要在24小时内将其转化为有声读物。传统方式需要专业配音员花费数天时间录…...

从视频剪辑到AI画图:聊聊NVIDIA CUDA加速到底怎么用,以及MediaCoder、Stable Diffusion的实际配置指南

从视频剪辑到AI画图:NVIDIA CUDA加速实战配置手册 在数字内容创作领域,时间就是生产力。当4K视频渲染需要通宵等待,当AI绘图每张耗时数分钟,任何能缩短等待时间的技术都值得关注。NVIDIA CUDA技术正是这样一把利器——它让GPU的数…...

零基础搭建GEMMA-3像素工作站:手把手教你部署这款能“看图说话”的JRPG风AI

零基础搭建GEMMA-3像素工作站:手把手教你部署这款能"看图说话"的JRPG风AI 1. 项目介绍与核心价值 1.1 什么是GEMMA-3像素工作站 GEMMA-3像素工作站是一款将Google最新多模态大模型Gemma-3与复古JRPG游戏界面完美融合的创新工具。它不仅能像普通AI那样处…...

LeetCode热题100 搜索旋转排序数组

题目描述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 向左旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], …...

抖音无水印视频批量下载终极指南:简单三步实现高效内容采集

抖音无水印视频批量下载终极指南&#xff1a;简单三步实现高效内容采集 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 你是否也曾为下载抖音视频而烦恼&#xff1f;手动复制链接、逐个下载、还要忍受平台水…...

EldenRingSaveCopier:开源存档管理工具守护艾尔登法环游戏进度安全

EldenRingSaveCopier&#xff1a;开源存档管理工具守护艾尔登法环游戏进度安全 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 一、遭遇存档危机&#xff1a;从崩溃到重生的游戏体验断层 当你操控褪色者在交…...

Qwen3.5-9B企业部署效果展示:客服知识库+产品图谱+FAQ生成三合一系统

Qwen3.5-9B企业部署效果展示&#xff1a;客服知识库产品图谱FAQ生成三合一系统 1. 引言&#xff1a;新一代企业级AI解决方案 在当今企业数字化转型浪潮中&#xff0c;智能客服系统已成为提升服务效率和用户体验的关键基础设施。Qwen3.5-9B作为最新一代多模态大模型&#xff0…...

LeetCode热题100 寻找旋转排序数组中的最小值

题目描述 已知一个长度为 n 的数组&#xff0c;预先按照升序排列&#xff0c;经由 1 到 n 次 旋转 后&#xff0c;得到输入数组。例如&#xff0c;原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到&#xff1a; 若旋转 4 次&#xff0c;则可以得到 [4,5,6,7,0,1,2] 若旋转 7 次…...