太原自学网站建设佛山网页设计培训

张小明 2025/12/30 11:11:53
太原自学网站建设,佛山网页设计培训,已有网站域名 怎么做网站,深圳龙岗区律师(新卷,200分)- 快递员的烦恼#xff08;Java JS Python C#xff09;题目描述快递公司每日早晨#xff0c;给每位快递员推送需要送到客户手中的快递以及路线信息#xff0c;快递员自己又查找了一些客户与客户之间的路线距离信息#xff0c;请你依据这些…(新卷,200分)- 快递员的烦恼Java JS Python C题目描述快递公司每日早晨给每位快递员推送需要送到客户手中的快递以及路线信息快递员自己又查找了一些客户与客户之间的路线距离信息请你依据这些信息给快递员设计一条最短路径告诉他最短路径的距离。注意不限制快递包裹送到客户手中的顺序但必须保证都送到客户手中用例保证一定存在投递站到每位客户之间的路线但不保证客户与客户之间有路线客户位置及投递站均允许多次经过所有快递送完后快递员需回到投递站输入描述首行输入两个正整数n、m接下来 n 行输入快递公司发布的客户快递信息格式为客户id 投递站到客户之间的距离distance再接下俩的 m 行是快递员自行查找的客户与客户之间的距离信息格式为客户id1 客户id2 distance在每行数据中数据与数据之间均以单个空格分隔规格0 n ≤ 100 ≤ m ≤ 100 客户id ≤ 10000 distance ≤ 10000输出描述最短路径距离如无法找到请输出-1用例输入2 11 10002 12001 2 300输出2500说明路径1快递员先把快递送到客户1中接下来直接走客户1到客户2之间的直通路线最后走投递站和客户2之间的路回到投递站距离为 1000 300 1200 2500路径2快递员先把快递送到客户1手中接下来回到快递站再出发把客户2的快递送过去再回到快递站距离为 1000 1000 1200 1200 4400路径3快递员先把快递送到客户2手中接下来直接走客户2到客户1之间的直通线路最后走投递站和客户1之间的路回到投递站距离为 1200 300 1000 2500其他路径......所有路径中最短路径距离为 2500输入5 15 10009 120017 300132 700500 23005 9 400输出9200说明在所有可行的路径中最短路径长度为 1000 400 1200 300 300 700 700 2300 2300 9200题目解析下图中 0节点 代表快递站。用例1图示用例2图示JS算法源码const rl require(readline).createInterface({ input: process.stdin }); var iter rl[Symbol.asyncIterator](); const readline async () (await iter.next()).value; void (async function () { const [n, m] (await readline()).split( ).map(Number); // floyd算法需要基于dist和path矩阵求解 // dist[i][j] 用于记录点 i-j 的最短距离初始时等价于邻接矩阵, 对与不直连的两点距离为无穷大 const dist new Array(n 1) .fill(0) .map(() new Array(n 1).fill(Infinity)); // path[i][j] 用于记录点 i-j 最短距离情况下需要经过的中转点初始时默认任意两点间无中转点即默认path[i][j] -1 const path new Array(n 1).fill(0).map(() new Array(n 1).fill(-1)); // 由于本题的客户id不是顺序的因此这里需要将客户id离散化处理 const map {}; for (let i 1; i n; i) { const [id, dis] (await readline()).split( ).map(Number); // 离散化处理 map[id] i; // 投递站到客户之间的距离distance dist[0][i] dis; dist[i][0] dis; } for (let i 1; i m; i) { const [id1, id2, dis] (await readline()).split( ).map(Number); const i1 map[id1]; const i2 map[id2]; // 客户与客户之间的距离信息 dist[i1][i2] dis; dist[i2][i1] dis; } // floyd算法调用 floyd(); // ans记录经过所有点后回到出发点的最短距离 let ans Infinity; // 全排列模拟经过所有点的路径 dfs(0, 0, new Array(n 1).fill(false), 0); console.log(ans); // floyd算法求解图中任意两点之间的最短路径 function floyd() { for (let k 0; k n 1; k) { for (let i 0; i n 1; i) { for (let j 0; j n 1; j) { // newDist是经过k后i-j的距离 const newDist dist[i][k] dist[k][j]; // 如果newDist是i-j的更短路径 if (newDist dist[i][j]) { // 则更新i-j的最短距离 dist[i][j] newDist; // 且此更短距离需要经过k, path[i][j]即记录 i-j 最短距离下需要经过点 k path[i][j] k; } } } } } /** * 找一条经过所有点的最短路径我们可以求解所有点形成的全排列每一个全排列都对应一条经过所有点的路径只是经过点的先后顺序不同 // * 求某个全排列过程中可以通过dist数组累计上一个点i到下一个点j的最短路径dist[i][j] * * param pre 上一个点, 初始为0表示从快递站出发 * param sum 当前全排列路径累计的路径权重 * param used 全排列used数组用于标记哪些点已使用过 * param level 用于记录排列的长度 */ function dfs(pre, sum, used, level) { if (level n) { // 此时pre是最后一个客户所在点送完最后一个客户后快递员需要回到快递站因此最终累计路径权重为 sum dist[pre][0] // 我们保留最小权重路径 ans Math.min(ans, sum dist[pre][0]); return; } for (let i 1; i n; i) { if (used[i]) continue; used[i] true; dfs(i, sum dist[pre][i], used, level 1); used[i] false; } } })();Java算法源码import java.util.HashMap; import java.util.Scanner; public class Main { static int n; static int[][] dist; static int[][] path; static int ans; public static void main(String[] args) { Scanner sc new Scanner(System.in); n sc.nextInt(); int m sc.nextInt(); // floyd算法需要基于dist和path矩阵求解 // dist[i][j] 用于记录点 i-j 的最短距离初始时等价于邻接矩阵 dist new int[n 1][n 1]; // path[i][j] 用于记录点 i-j 最短距离情况下需要经过的中转点初始时默认任意两点间无中转点即默认path[i][j] -1 path new int[n 1][n 1]; for (int i 0; i n 1; i) { for (int j 0; j n 1; j) { // 初始时默认i,j不相连即i,j之间距离无穷大 if (i ! j) { dist[i][j] Integer.MAX_VALUE; } path[i][j] -1; } } // 由于本题的客户id不是顺序的因此这里需要将客户id离散化处理 HashMapInteger, Integer map new HashMap(); for (int i 1; i n; i) { int id sc.nextInt(); int dis sc.nextInt(); // 离散化处理 map.put(id, i); // 投递站到客户之间的距离distance dist[0][i] dis; dist[i][0] dis; } for (int i 1; i m; i) { int id1 sc.nextInt(); int id2 sc.nextInt(); int dis sc.nextInt(); int i1 map.get(id1); int i2 map.get(id2); // 客户与客户之间的距离信息 dist[i1][i2] dis; dist[i2][i1] dis; } // floyd算法调用 floyd(); // ans记录经过所有点后回到出发点的最短距离 ans Integer.MAX_VALUE; // 全排列模拟经过所有点的路径 dfs(0, 0, new boolean[n 1], 0); System.out.println(ans); } // floyd算法求解图中任意两点之间的最短路径 public static void floyd() { for (int k 0; k n 1; k) { for (int i 0; i n 1; i) { for (int j 0; j n 1; j) { // newDist是经过k后i-j的距离 int newDist dist[i][k] dist[k][j]; // 如果newDist是i-j的更短路径 if (newDist dist[i][j]) { // 则更新i-j的最短距离 dist[i][j] newDist; // 且此更短距离需要经过k, path[i][j]即记录 i-j 最短距离下需要经过点 k path[i][j] k; } } } } } /** * 找一条经过所有点的最短路径我们可以求解所有点形成的全排列每一个全排列都对应一条经过所有点的路径只是经过点的先后顺序不同 // * 求某个全排列过程中可以通过dist数组累计上一个点i到下一个点j的最短路径dist[i][j] * * param pre 上一个点, 初始为0表示从快递站出发 * param sum 当前全排列路径累计的路径权重 * param used 全排列used数组用于标记哪些点已使用过 * param level 用于记录排列的长度 */ public static void dfs(int pre, int sum, boolean[] used, int level) { if (level n) { // 此时pre是最后一个客户所在点送完最后一个客户后快递员需要回到快递站因此最终累计路径权重为 sum dist[pre][0] // 我们保留最小权重路径 ans Math.min(ans, sum dist[pre][0]); return; } for (int i 1; i n; i) { if (used[i]) continue; used[i] true; dfs(i, sum dist[pre][i], used, level 1); used[i] false; } } }Python算法源码import sys # 输入获取 n, m map(int, input().split()) # floyd算法需要基于dist和path矩阵求解 # dist[i][j] 用于记录点 i-j 的最短距离初始时等价于邻接矩阵 dist [[sys.maxsize] * (n 1) for _ in range(n 1)] # path[i][j] 用于记录点 i-j 最短距离情况下需要经过的中转点初始时默认任意两点间无中转点即默认path[i][j] -1 path [[-1] * (n 1) for _ in range(n 1)] # 由于本题的客户id不是顺序的因此这里需要将客户id离散化处理 dic {} for i in range(1, n 1): idx, dis map(int, input().split()) # 离散化处理 dic[idx] i # 投递站到客户之间的距离distance dist[0][i] dis dist[i][0] dis for i in range(1, m 1): idx1, idx2, dis map(int, input().split()) i1 dic[idx1] i2 dic[idx2] # 客户与客户之间的距离信息 dist[i1][i2] dis dist[i2][i1] dis # ans记录经过所有点后回到出发点的最短距离 ans sys.maxsize # floyd算法求解图中任意两点之间的最短路径 def floyd(): for k in range(n 1): for i in range(n 1): for j in range(n 1): # newDist是经过k后i-j的距离 newDist dist[i][k] dist[k][j] # 如果newDist是i-j的更短路径 if newDist dist[i][j]: # 则更新i-j的最短距离 dist[i][j] newDist # 且此更短距离需要经过k, path[i][j]即记录 i-j 最短距离下需要经过点 k path[i][j] k def dfs(pre, sumDis, used, level): 找一条经过所有点的最短路径我们可以求解所有点形成的全排列每一个全排列都对应一条经过所有点的路径只是经过点的先后顺序不同 // 求某个全排列过程中可以通过dist数组累计上一个点i到下一个点j的最短路径dist[i][j] :param pre: 上一个点, 初始为0表示从披萨店出发 :param sumDis: 当前全排列路径累计的路径权重 :param used: 全排列used数组用于标记哪些点已使用过 :param level: 用于记录排列的长度 global ans if level n: # 此时pre是最后一个客户所在点送完最后一个客户后司机需要回到披萨店因此最终累计路径权重为 sum dist[pre][0] # 我们保留最小权重路径 ans min(ans, sumDis dist[pre][0]) return for i in range(1, n 1): if used[i]: continue used[i] True dfs(i, sumDis dist[pre][i], used, level 1) used[i] False # 算法入口 def main(): # floyd算法调用 floyd() # 全排列模拟经过所有点的路径 dfs(0, 0, [False] * (n 1), 0) print(ans) # 算法调用 main()C算法源码#include stdio.h #include limits.h #define MIN(a, b) ((a) (b) ? (a) : (b)) #define MAX_SIZE 11 #define MAX_ID 1000 int n; int dist[MAX_SIZE][MAX_SIZE]; int path[MAX_SIZE][MAX_SIZE]; int ans; /** * 找一条经过所有点的最短路径我们可以求解所有点形成的全排列每一个全排列都对应一条经过所有点的路径只是经过点的先后顺序不同 // * 求某个全排列过程中可以通过dist数组累计上一个点i到下一个点j的最短路径dist[i][j] * * param pre 上一个点, 初始为0表示从披萨店出发 * param sum 当前全排列路径累计的路径权重 * param used 全排列used数组用于标记哪些点已使用过 * param level 用于记录排列的长度 */ void dfs(int pre, int sum, int used[], int level) { if (level n) { // 此时pre是最后一个客户所在点送完最后一个客户后司机需要回到披萨店因此最终累计路径权重为 sum dist[pre][0] // 我们保留最小权重路径 ans MIN(ans, sum dist[pre][0]); return; } for (int i 1; i n; i) { if (used[i]) continue; used[i] 1; dfs(i, sum dist[pre][i], used, level 1); used[i] 0; } } // floyd算法求解图中任意两点之间的最短路径 void floyd() { for (int k 0; k n 1; k) { for (int i 0; i n 1; i) { for (int j 0; j n 1; j) { // newDist是经过k后i-j的距离 int newDist dist[i][k] dist[k][j]; // 如果newDist是i-j的更短路径 if (newDist dist[i][j]) { // 则更新i-j的最短距离 dist[i][j] newDist; // 且此更短距离需要经过k, path[i][j]即记录 i-j 最短距离下需要经过点 k path[i][j] k; } } } } } int main() { int m; scanf(%d %d, n, m); for (int i 0; i n 1; i) { for (int j 0; j n 1; j) { // 初始时默认i,j不相连即i,j之间距离无穷大 if (i ! j) { dist[i][j] INT_MAX; } path[i][j] -1; } } // 由于本题的客户id不是顺序的因此这里需要将客户id离散化处理 int map[MAX_ID]; for (int i 1; i n; i) { int id, dis; scanf(%d %d, id, dis); // 离散化处理 map[id] i; // 投递站到客户之间的距离distance dist[0][i] dis; dist[i][0] dis; } for (int i 1; i m; i) { int id1, id2, dis; scanf(%d %d %d, id1, id2, dis); int i1 map[id1]; int i2 map[id2]; // 客户与客户之间的距离信息 dist[i1][i2] dis; dist[i2][i1] dis; } // floyd算法调用 floyd(); // ans记录经过所有点后回到出发点的最短距离 ans INT_MAX; // 全排列模拟经过所有点的路径 int used[MAX_SIZE] {0}; dfs(0, 0, used, 0); printf(%d\n, ans); }
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

中山网站快照优化公司个人如何注册网址

你可能遇到过这样的困境:面对市场上琳琅满目的金融预测模型,不知道如何选择最适合自己需求的那一款。是追求极致的预测精度,还是优先考虑资源效率?今天,我们一起来通过三个真实案例,找到这个问题的答案。 【…

张小明 2025/12/27 0:39:25 网站建设

建设银行手机行网站王烨林

Linly-Talker 支持自定义唤醒词,开启智能家居的专属交互时代 在智能音箱泛滥、语音助手“千人一面”的今天,你是否曾因电视里一句广告词而被误唤醒?是否担心家人的私密对话被上传至云端?又是否希望孩子口中的“小乐”和老人呼唤的…

张小明 2025/12/29 15:09:27 网站建设

怎么做短文网站苏州网络推广推广

Midscene.js终极指南:用AI视觉技术彻底颠覆传统浏览器自动化 【免费下载链接】midscene Let AI be your browser operator. 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene 还在为复杂的CSS选择器而头疼吗?每次页面更新都要重写自动…

张小明 2025/12/27 1:17:13 网站建设

网站建设开发免费咨询专业设计网站有哪些

FaceFusion开源项目的贡献指南:如何参与开发? 在深度生成模型席卷内容创作领域的今天,人脸编辑技术早已不再是实验室里的神秘黑箱。从社交媒体上的趣味滤镜到影视工业中的数字替身,换脸(Face Swapping)与人…

张小明 2025/12/27 4:33:26 网站建设

商业网站的基本构成单位网站建设必要性

深入解析fflate:现代JavaScript压缩解压技术实践指南 【免费下载链接】fflate 项目地址: https://gitcode.com/gh_mirrors/ff/fflate 在当今Web开发领域,数据压缩已成为提升应用性能的关键技术。fflate作为一款纯JavaScript实现的高性能压缩库&a…

张小明 2025/12/26 23:40:01 网站建设

做模板网站推荐乐云seo响应式网页设计与实现论文

Excalidraw结构化数据标记:让手绘草图成为可搜索的知识资产 在技术团队的日常协作中,你是否经历过这样的场景?新来的工程师翻遍文档库、聊天记录和邮件附件,只为找到一张关键的系统架构图;而那张图偏偏是某位老员工随手…

张小明 2025/12/27 5:07:01 网站建设