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

25年的第二题--旅行最短路径问题

暴力解法思路弗洛伊德算法全图最短路径搜集有 n 个点要每个点都走一遍枚举所有可能的访问顺序全排列 对每种顺序按顺序走算总距离 最后输出最小的总距离//计算任意两个点之间的最短路径暴力全部计算经过中转站后的最短路径//一种经典的求全图的最短路径算法privatestaticvoidfloyd(int[][]dist,intn){finalintINF1000000;//让每个点都走下这个中转站//并且我们都是把地点从1开始的所以这里一定注意循环for(intk1;kn;k){for(inti1;in;i){for(intj1;jn;j){//只要中转站不是不可达的都试一下--这很暴力if(dist[i][k]!INF||dist[k][j]!INF){dist[i][j]Math.min(dist[i][j],dist[i][k]dist[k][j]);}}}}}功能函数2暴力枚举求解最小时间//寻找最短路径privatestaticintfindminway(int[][]dist,intn){//在搜索最短路劲的时候引入一个标记位boolean[]visnewboolean[n1];vis[1]true;// 固定从1号点出发// 2. 暴力 DFS 核心精简版只传必要参数 // now 当前在哪个点// cnt 已经走了几个点// cost 目前花了多少钱// vis 哪些点走过// dist 两点之间最短距离必须传// n 总共有几个点intmindfs(1,1,0,vis,dist,n);returnmin;}privatestaticintdfs(intnow,intcount,intcost,boolean[]vis,int[][]dist,intn){if(countn)returncost;// 递归出口所有点都走完了直接返回【这一条路的总花费】// 先设成无穷大表示还没找到路intminCost100000000;//循环N个点的探索for(inti1;in;i){if(!vis[i])//如果没有探索过{vis[i]true;//没有探索过的话继续往深处走。//完成了--计数功能花费时长统计功能,并且保留当前的节点的最小路径intcostnextdfs(i,count1,costdist[now][i],vis,dist,n);//保留最小的分支minCostMath.min(costnext,minCost);vis[i]false;}}returnminCost;}packagefushi.zhenti.shangji.lvxing;importjava.util.Arrays;importjava.util.Scanner;publicclassdaka{publicstaticvoidmain(String[]args){finalintINF1000000;ScannerscnewScanner(System.in);intmsc.nextInt();//定义边的数量intnsc.nextInt();//定义输入的地点数量int[][]distnewint[n1][n1];//定义n1个用来存储下对应下标的地点//初始化顶点之间的距离for(inti1;in;i){Arrays.fill(dist[i],INF);dist[i][i]0;//自己到自己为0}//读边的信息for(inti0;im;i){intusc.nextInt();//起点intvsc.nextInt();//终点intwsc.nextInt();//长度dist[u][v]w;dist[v][u]w;}floyd(dist,n);intminfindminway(dist,n);System.out.println(min);}//寻找最短路径privatestaticintfindminway(int[][]dist,intn){//在搜索最短路劲的时候引入一个标记位boolean[]visnewboolean[n1];vis[1]true;// 固定从1号点出发// 2. 暴力 DFS 核心精简版只传必要参数 // now 当前在哪个点// cnt 已经走了几个点// cost 目前花了多少钱// vis 哪些点走过// dist 两点之间最短距离必须传// n 总共有几个点intmindfs(1,1,0,vis,dist,n);returnmin;}privatestaticintdfs(intnow,intcount,intcost,boolean[]vis,int[][]dist,intn){if(countn)returncost;// 递归出口所有点都走完了直接返回【这一条路的总花费】// 先设成无穷大表示还没找到路intminCost100000000;//循环N个点的探索for(inti1;in;i){if(!vis[i])//如果没有探索过{vis[i]true;//没有探索过的话继续往深处走。//完成了--计数功能花费时长统计功能,并且保留当前的节点的最小路径intcostnextdfs(i,count1,costdist[now][i],vis,dist,n);//保留最小的分支minCostMath.min(costnext,minCost);vis[i]false;}}returnminCost;}//计算任意两个点之间的最短路径暴力全部计算经过中转站后的最短路径//一种经典的求全图的最短路径算法privatestaticvoidfloyd(int[][]dist,intn){finalintINF1000000;//让每个点都走下这个中转站//并且我们都是把地点从1开始的所以这里一定注意循环for(intk1;kn;k){for(inti1;in;i){for(intj1;jn;j){//只要中转站不是不可达的都试一下--这很暴力if(dist[i][k]!INFdist[k][j]!INF){dist[i][j]Math.min(dist[i][j],dist[i][k]dist[k][j]);}}}}}}1. 整体功能你的代码做了一件事从 1 号点出发遍历所有地点求最短路径总长度。两步核心Floyd求任意两点最短距离DFS 暴力枚举所有走法找最小值2. 初始化你写的for(inti1;in;i){Arrays.fill(dist[i],INF);dist[i][i]0;}数组开n1点编号从 1 开始每一行先全部填无穷大表示最开始都不可达自己到自己 03. 读入边你写的for(inti0;im;i){intusc.nextInt();intvsc.nextInt();intwsc.nextInt();dist[u][v]w;dist[v][u]w;}i 从 0 开始只是循环 m 次读 m 条路无向图双向距离一样4. Floyd 算法你写的for(intk1;kn;k)for(inti1;in;i)for(intj1;jn;j)k 中转站i 起点j 终点只有i 能到 k 且 k 能到 j才更新更新公式i→j 直接走 vs 经k中转取最短5. DFS 暴力搜索你写的dfs(now,count,cost,vis,dist,n)now当前在哪个点count已经走了几个点cost当前总花费vis标记哪些点走过走到count n→ 表示走完所有点返回花费枚举所有没走过的点 → 标记 → 递归 → 回溯最后返回最小花费6. 你的代码最关键的 3 个要点点从 1 开始所以循环都是i n二维数组必须一行一行 fillDFS 靠递归回溯枚举所有路线找最小值最终一句话总结你的代码先建图并初始化距离矩阵 → 用 Floyd 算出所有点之间的最短路径 → 用 DFS 暴力枚举所有遍历路线 → 返回最短总路径。

相关文章:

25年的第二题--旅行最短路径问题

暴力解法思路 弗洛伊德算法全图最短路径搜集有 n 个点, 要每个点都走一遍 枚举所有可能的访问顺序(全排列) 对每种顺序, 按顺序走,算总距离 最后输出最小的总距离//计算任意两个点之间的最短路径!暴力全部计…...

【通信观系列】三十七、卫星物联网

卫星物联网卫星物联网的发展背景卫星物联网的应用价值卫星物联网的技术进展2023-04-10 请大家注意,我说的是“物联网”,而不是“互联网”。 众所周知,按使用对象,互联网可以分为“人联网”和“物联网”。我们普通消费者用户使用…...

PowerBI累计求和实战:从帕累托分析到动态度量值(附完整DAX代码)

PowerBI累计求和实战:从帕累托分析到动态度量值(附完整DAX代码) 在电商数据分析领域,识别关键客户和产品是提升运营效率的核心。当我们需要分析哪些20%的客户贡献了80%的营收时,帕累托分析(80/20法则&#…...

Aipy 代码开发的超强能力

# 伪代码示例:使用aipy进行射电干涉测量数据处理 import aipy import numpy as npdef calibrate_uv_data(uv_file):# 创建UV数据对象uv aipy.miriad.UV(uv_file)# 初始化天线阵列aa aipy.cal.get_aa(mwa, uv[sdf], uv[sfreq], uv[nchan])# 相位校准for pol in [xx…...

罗根口播智能体:IP 口播获客必备神器,罗根智能体实现 IP 口播视频自动化生成

文章标签:# 罗根 #罗根智能体 #罗根口播智能体 #IP 口播智能体 #AI 数字人 #智能 Agent 开发框架 #自媒体口播工具 核心关键词:罗根,罗根智能体,罗根口播智能体,IP 口播智能体 一、罗根智能体核心介绍:轻…...

Chandra OCR入门指南:从HuggingFace加载权重到vLLM推理服务的完整迁移路径

Chandra OCR入门指南:从HuggingFace加载权重到vLLM推理服务的完整迁移路径 如果你手头有一堆扫描的合同、PDF报告、数学试卷或者带表格的文档,想把它们一键转换成结构清晰的Markdown、HTML或JSON,那么Chandra OCR就是你正在寻找的工具。 这…...

基于Simulink的自适应反步法(Adaptive Backstepping)控制​

目录 手把手教你学Simulink——基于Simulink的自适应反步法(Adaptive Backstepping)控制​ 摘要​ 一、背景与挑战​ 1.1 非线性系统控制的痛点​ 1.1.1 未知参数的影响​ 1.1.2 传统反步法的局限​ 1.2 自适应反步法的核心优势​ 1.2.1 原理:参数估计+反步设计融合​…...

ComfyUI-WanVideoWrapper实战指南:8GB显存也能玩转14B AI视频生成模型

ComfyUI-WanVideoWrapper实战指南:8GB显存也能玩转14B AI视频生成模型 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 还在为AI视频生成的高显存门槛而苦恼吗?每次尝试运…...

AI4S应用:药物研发中结合自由能计算方法的创新突破

▊ 药物研发中结合自由能计算应用现状 药物分子通过对靶蛋白的识别与结合作用,能够调控靶蛋白功能,进而实现治疗疾病的效果。蛋白质的许多关键生理和药理活动是通过与小分子相互作用来实现,比如酶的催化特性是由其与底物的相互作用所体现的。…...

图文搜索不准?立知lychee-rerank-mm快速部署,精准排序搜索结果

图文搜索不准?立知lychee-rerank-mm快速部署,精准排序搜索结果 1. 为什么需要多模态重排序 在日常使用搜索引擎或内容平台时,我们经常会遇到这样的困扰:明明输入了精确的查询词,返回的结果却总是差强人意。比如搜索&…...

W7500裸机HTTP服务器:基于W5500硬件协议栈的嵌入式LED控制

1. 项目概述httpServer是为 WIZwiki-W7500 开发板定制的轻量级嵌入式 HTTP 服务器示例程序,其核心目标并非构建通用 Web 服务框架,而是以最小资源开销实现对硬件外设(特别是板载 LED)的远程状态控制与交互。该程序直接运行于 W750…...

LIS302加速度传感器SPI驱动开发与嵌入式集成

1. LIS302加速度传感器驱动库深度解析:面向嵌入式系统的SPI接口实现LIS302系列是意法半导体(STMicroelectronics)推出的超低功耗、三轴数字加速度传感器,广泛应用于便携式设备的姿态检测、振动监测、跌落保护及运动识别等场景。该…...

解锁《原神》60帧限制:从硬件封印到视觉自由的进阶指南

解锁《原神》60帧限制:从硬件封印到视觉自由的进阶指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 你是否曾为《原神》那恒定的60帧限制感到困扰?当你的高端显…...

PyTorch Geometric安装避坑大全:从版本地狱到一键成功,我总结了这份Win/Mac/Linux三平台检查清单

PyTorch Geometric跨平台安装终极指南:从版本陷阱到系统级验证 第一次尝试安装PyTorch Geometric(PyG)时,我花了整整两天时间在版本冲突和依赖地狱中挣扎。那些undefined symbol错误和CUDA版本不匹配的报错信息,至今想…...

GDAL3.1.2+VS2015编译指南:如何用CMake搞定PROJ6依赖?附现成编译好的lib文件

GDAL 3.1.2与VS2015深度编译实战:CMake可视化配置与PROJ6依赖全解析 在空间数据处理领域,GDAL作为地理信息系统的"瑞士军刀",其重要性不言而喻。但对于需要在Windows平台下进行二次开发的科研人员来说,从源码编译GDAL往…...

从理论到实践:TimeGAN驱动的时间序列场景生成与多维可视化解析

1. TimeGAN:时间序列生成的革命性突破 第一次接触TimeGAN是在处理一组电力负荷预测数据时遇到的难题——我们只有少量历史数据,却需要模拟未来可能出现的各种用电场景。传统方法要么需要复杂的参数假设,要么生成的序列缺乏时间依赖性。直到发…...

嵌入式轻量级软件定时器:基于时间轮的毫秒级超时管理

1. 项目概述SimpleSoftTimer 是一个面向资源受限嵌入式系统的轻量级纯软件定时器实现,其设计哲学直指嵌入式开发中最频繁也最易出错的场景之一:超时控制。它不依赖硬件定时器外设(如 TIMx)、不引入 RTOS 内核调度机制(…...

C++高并发内存池:内存池调优与测试

前面我们已经完成了三种Cache的设计。本期我们就来调整一下内存池相关的设计问题 相关代码在我的个人gitee:高并发内存池: 个人学习的项目——高并发内存池 目录 对于大于256KB的内存申请释放 释放对象优化 配备内存池申请变量 多线程下与malloc的性能测试对比…...

Youtu-Parsing助力AI编程:自动解析技术文档生成代码片段

Youtu-Parsing助力AI编程:自动解析技术文档生成代码片段 每次接触一个新的开发库或者框架,你是不是也经历过这样的时刻?面对动辄几十页的官方文档,或者一个结构复杂的开源项目README,感觉无从下手。想快速写个Demo试试…...

Troyka-IMU库详解:10-DOF惯性测量单元Arduino驱动开发

1. Troyka-IMU 库深度解析:面向嵌入式工程师的 Amperka 10-DOF 惯性测量单元驱动开发指南1.1 项目定位与工程价值Troyka-IMU 是专为 Amperka 公司推出的10 自由度(10-DOF)惯性测量单元模块设计的 Arduino 兼容库。该模块集成四类高精度传感器…...

从零搭建CarSim与Simulink联合仿真环境:实现定速巡航控制

1. 环境准备与软件安装 第一次接触CarSim和Simulink联合仿真时,我被各种专业术语搞得晕头转向。后来才发现,只要把这两个软件想象成一对默契的搭档——CarSim负责模拟真实车辆行为,Simulink则扮演控制大脑的角色。搭建环境就像组装乐高积木&a…...

无障碍辅助先锋:OpenClaw+QwQ-32B语音控制电脑全流程实测

无障碍辅助先锋:OpenClawQwQ-32B语音控制电脑全流程实测 1. 为什么我们需要语音控制电脑 去年冬天,我的一位因脊髓损伤而行动不便的朋友向我倾诉了他的困扰——每天需要花费大量时间在简单的电脑操作上。一个简单的网页搜索可能要耗费他十几分钟&#…...

中小企业NLP提效方案:MT5中文数据增强镜像在训练集扩增中的落地实践

中小企业NLP提效方案:MT5中文数据增强镜像在训练集扩增中的落地实践 你是不是也遇到过这样的困境?公司想做一个智能客服或者文本分类系统,但手头只有几百条标注数据,模型训练出来效果总是不尽人意。找外包公司标注?成…...

Visual Studio Code 远程开发:调试 Pixel Mind Decoder 调用代码

Visual Studio Code 远程开发:调试 Pixel Mind Decoder 调用代码 1. 前言:为什么需要远程开发 当你需要在GPU服务器上运行和调试AI模型代码时,直接在本地开发会遇到各种环境问题。Visual Studio Code的远程开发功能可以让你像在本地一样编写…...

嵌入式Makefile工程化构建详解:依赖管理与交叉编译实践

1. Makefile工程化构建系统详解:从原理到实践Makefile作为Unix/Linux平台最经典的构建工具,其设计哲学深刻影响了后续所有现代构建系统。在嵌入式开发领域,无论是裸机固件、RTOS应用还是Linux驱动模块,Makefile仍是项目构建流程的…...

跨平台Socket编程头文件兼容性与适配方案

1. 跨平台Socket编程的头文件兼容性问题分析1.1 问题现象与工程背景在嵌入式系统开发与网络应用移植过程中,开发者常遇到一种典型现象:一段在Linux环境下使用GCC编译通过的C语言Socket程序,在Windows平台下使用MinGW-GCC编译时出现大量头文件…...

Cosmos-Reason1-7B辅助Anaconda环境管理:创建专属模型推理Python环境

Cosmos-Reason1-7B辅助Anaconda环境管理:创建专属模型推理Python环境 你是不是也遇到过这种情况?想在自己的电脑上跑一下Cosmos-Reason1-7B这类大模型试试效果,结果光是配环境就折腾了大半天。Python版本不对,各种依赖包冲突&…...

Spring-AI 第 02 章 - 基础对话功能详解

📚 理论基础 LLM 对话原理 大语言模型的对话基于自回归生成原理:模型根据已生成的内容预测下一个 token,循环往复直到完成回复。 输入:"你好" → 模型 → "你" → "好" → "!"…...

DAMO-YOLO新手必看:5个步骤,轻松玩转阿里达摩院视觉系统

DAMO-YOLO新手必看:5个步骤,轻松玩转阿里达摩院视觉系统 1. 认识DAMO-YOLO:阿里达摩院的视觉黑科技 DAMO-YOLO是阿里达摩院基于TinyNAS架构开发的高性能实时目标检测系统。这个系统将工业级识别能力与未来主义视觉体验完美融合,…...

用Foxglove Studio可视化自动驾驶数据:激光雷达点云与IMU融合调试实战

用Foxglove Studio可视化自动驾驶数据:激光雷达点云与IMU融合调试实战 自动驾驶系统的开发离不开对多传感器数据的实时监控与深度分析。当激光雷达扫描的密集点云、IMU采集的高频惯性数据以及车辆轨迹信息需要同步呈现时,传统工具往往面临视角割裂、坐标…...