C# 根据两点名称,寻找两短路程的最优解,【有数据库设计,完整代码】

前言

如果我们遇到路径问题,可以使用点点连线,给定一个点,可以到达另外几个点,寻找最优解
例:如下图所示,如果要从A1-C1,可以有三条路

1.A1-B1-C1
2.A1-B2-C1
3.A1-B3-C1

最优解肯定是A1-B1-C1,因为两点之间直线最短,但当业务复杂时,我们就要通过轮询来查出最优路径
在这里插入图片描述

数据库设计

首先是数据库的设计:创建表:sys_pilot

CREATE TABLE sys_pilot (pilotid numeric(1000) NOT NULL, -- 内场点位Idptname varchar(50) NOT NULL, -- 点位名称xaxis int4 NOT NULL, -- X轴yaxis int4 NULL, -- Y轴transfer varchar(500) NULL, -- 经过点CONSTRAINT sys_pilot_pk PRIMARY KEY (pilotid)
);
COMMENT ON TABLE public.sys_pilot IS '点位图表';

后端代码

根据传入的两点名称,例:A1,C1
最优解:A1-B1-C1就会被依次返回

        private static Dictionary<string, Sys_Pilot> _points;/// <summary>/// 查找图形点位/// </summary>/// <param name="json"></param>/// <returns></returns>/// <exception cref="InterfaceException"></exception>public List<Sys_Pilot> VerifyPilot(string json){Sys_Pilot pilot = JsonHelper.Instance.Deserialize<Sys_Pilot>(json);string[] values = pilot.PtName.Split(',');if (values.Length != 2){throw new InterfaceException("请传入两个点");}string inPoint = values[0];string terminus = values[1];List<Sys_Pilot> pilots = _paramsDal.FindData(new Sys_Pilot());List<Sys_Pilot> shortestPath = ShortestPath(pilots, inPoint, terminus);return shortestPath;}/// <summary>/// 轮询查出中间点/// </summary>/// <param name="pilots"></param>/// <param name="start"></param>/// <param name="end"></param>/// <returns></returns>public List<Sys_Pilot> ShortestPath(List<Sys_Pilot> pilots, string start, string end){_points = pilots.ToDictionary(p => p.PtName);Dictionary<string, int> distances = new Dictionary<string, int>();Dictionary<string, string> previous = new Dictionary<string, string>();HashSet<string> visited = new HashSet<string>();foreach (var point in _points.Values){distances[point.PtName] = int.MaxValue;previous[point.PtName] = null;}distances[start] = 0;while (visited.Count < _points.Count){string current = null;int shortestDistance = int.MaxValue;foreach (var point in _points.Values){if (!visited.Contains(point.PtName) && distances[point.PtName] < shortestDistance){current = point.PtName;shortestDistance = distances[point.PtName];}}visited.Add(current);if (current == end)break;if (_points[current].Transfer != null) {foreach (var neighbor in _points[current].Transfer.Split(',')){if (!_points.ContainsKey(neighbor))continue;int alt = distances[current] + Distance(_points[current], _points[neighbor]);if (alt < distances[neighbor]){distances[neighbor] = alt;previous[neighbor] = current;}}}else if (current == end) {break;}}List<Sys_Pilot> path = new List<Sys_Pilot>();string temp = end;while (temp != null){path.Add(_points[temp]);temp = previous[temp];}path.Reverse();return path;}/// <summary>/// 计算X,Y轴距离距离/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <returns></returns>private int Distance(Sys_Pilot a, Sys_Pilot b){return (int)Math.Sqrt(Math.Pow((a.XAxis - b.XAxis), 2) + Math.Pow((a.YAxis - b.YAxis), 2));}

后记

前端代码是通过Uni-app实现的,有兴趣可以看下Uni-app开发Canvas当子组件示例,点点绘制图形

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

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

相关文章

Java代码审计安全篇-XXE(XML外部实体注入)漏洞

前言&#xff1a; 堕落了三个月&#xff0c;现在因为被找实习而困扰&#xff0c;着实自己能力不足&#xff0c;从今天开始 每天沉淀一点点 &#xff0c;准备秋招 加油 注意&#xff1a; 本文章参考qax的网络安全java代码审计&#xff0c;记录自己的学习过程&#xff0c;还希望各…

软考77-上午题-【面向对象技术3-设计模式】-创建型设计模式02

一、生成器模式 1-1、意图 将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 1-2、结构图 Builder 为创建一个 Product 对象的各个部件指定抽象接口。ConcreteBuilder 实现 Builder 的接口以构造和装配该产品的各个部件&#xff0c;定…

3.14word直播知识点

word图表&#xff1a; 找到数据源→插入→图表→组合→带数据标签的折线图&#xff08;次要坐标轴&#xff09;→设计选项卡→切换行列&#xff08;excel不能关&#xff09;→&#xff08;单击右键&#xff0c;设置数据系列格式&#xff09;设置最大最小值→刻度单位→标签为无…

docker部署mysql5

1. 进入面板 2. 新建挂载文件夹 新建三个文件夹: mkdir -p /docker/mysql5/config && mkdir -p /docker/mysql5/data && mkdir -p /docker/mysql5/logsconfig&#xff1a;存放mysql配置data&#xff1a;存放mysql数据logs&#xff1a;存放mysql记录日志 3.…

css设置选中文字和选中图片字的颜色

要改变页面中选中文字的颜色&#xff0c;可以使用 CSS 的 ::selection 伪元素来实现 *::selection {/* 改变选中文字的背景色 */background-color: #c42121;/* 改变选中文字的文本颜色 */color: #fff; } 用通配符选择器给所有元素都加上了 ::selection伪元素&#xff0c;用于…

GPT实战系列-如何让LangChain的Agent选择工具

GPT实战系列-如何让LangChain的Agent选择工具 LangChain GPT实战系列-LangChain如何构建基通义千问的多工具链 GPT实战系列-构建多参数的自定义LangChain工具 GPT实战系列-通过Basetool构建自定义LangChain工具方法 GPT实战系列-一种构建LangChain自定义Tool工具的简单方法…

这个不需要吗 HttpServletRequest req

这个不需要吗 HttpServletRequest req 在这个特定场景下&#xff0c;您在OnlineStudentFeignService接口中确实不需要直接使用HttpServletRequest对象。因为Feign是一个声明式的HTTP客户端&#xff0c;它的设计目标是简化服务间的远程调用&#xff0c;它并不直接处理原始的HTT…

先验分布、后验分布、极大似然的一点思考

今天和组里同事聊天的时候&#xff0c;无意中提到了贝叶斯统计里先验分布、后验分布、以及极大似然估计这三个概念。同事专门研究如何利用条件概率做系统辨识的&#xff0c;给我画了一幅图印象非常深刻&#xff1a; 其中k表示时序关系。上面这个图表示后验分布是由先验分布与似…

SparkSQL读取本地文件写入MySQL

unit1&#xff1a;LoggerLevel 思路在main代码中&#xff0c;读取的文件要注意格式。 package com.unitsimport org.apache.log4j.{Level, Logger}trait LoggerLevel {Logger.getLogger("org").setLevel(Level.ERROR) }unit2&#xff1a;getLocalSparkSession pac…

2024年云服务器ECS价格表出炉——阿里云

2024年阿里云服务器租用费用&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核4G服务…

深入理解TCP的四次分手过程

文章目录 深入理解TCP的四次分手过程四次分手的意义四次分手的工作原理四次分手的重要性实际应用中的考虑结论补充:TIME_WAIT在哪一步?TIME_WAIT状态的目的TIME_WAIT状态的影响 深入理解TCP的四次分手过程 在网络通信中&#xff0c;TCP&#xff08;传输控制协议&#xff09;确…

在Linux/Ubuntu/Debian中使用7z压缩和解压文件

要在 Ubuntu 上使用 7-Zip 创建 7z 存档文件&#xff0c;你可以使用“7z”命令行工具。 操作方法如下&#xff1a; 安装 p7zip&#xff1a; 如果你尚未在 Ubuntu 系统上安装 p7zip&#xff08;7-Zip 的命令行版本&#xff09;&#xff0c;你可以使用以下命令安装它&#xff1a;…

Gitlab光速发起Merge Request

前言 在我们日常开发过程中需要经常使用到Merge Request&#xff0c;在使用过程中我们需要来回在开发工具和UI界面之前来回切换&#xff0c;十分麻烦。那有没有一种办法可以时间直接开发开工具中直接发起Merge Request呢&#xff1f; 答案是有的。 使用 Git 命令方式创建 Me…

第八节:Vben Admin登录界面自定义和注销

系列文章目录 第一节:Vben Admin介绍和初次运行 第二节:Vben Admin 登录逻辑梳理和对接后端准备 第三节:Vben Admin登录对接后端login接口 第四节:Vben Admin登录对接后端getUserInfo接口 第五节:Vben Admin权限-前端控制方式 第六节:Vben Admin权限-后端控制方式 第七节…

k8s学习笔记

k8s学习笔记 定义1、pod2、Deployment3、Label4、Service5、Namespace kubectl工具 笔记大部分从官方地址中总结的&#xff0c;可以参考官方地址学习。 k8s官方文档地址&#xff1a;https://kubernetes.io/zh-cn/docs/ 定义 k8s中&#xff0c;所有内容都被抽象成资源&#xff…

Unity资源热更新----AssetBundle

13.1 资源热更新——AssetBundle1-1_哔哩哔哩_bilibili Resources 性能消耗较大 Resources文件夹大小不能超过2个G 获取AssetBundle中的资源 打包流程 选择图片后点击 创建文件夹&#xff0c;Editor优先编译 打包文件夹位置 using UnityEditor; using UnityEngine; public cla…

ideaSSM社区二手交易平台C2C模式开发mysql数据库web结构java编程计算机网页源码maven项目

一、源码特点 idea ssm 社区二手交易平台系统是一套完善的完整信息管理系统&#xff0c;结合SSM框架完成本系统SpringMVC spring mybatis &#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码…

CCCorelib 点云八叉树下采样(CloudCompare内置算法库)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 octree采样方法与体素滤波器与很多相似之处,他们唯一的区别就是体素滤波器使用的是体元中的原始点集的质心作为采样点,而octree方法则是把距离体元中心最近的那个点作为采样点。这样的做法使得octree采样所获取的…

django-comment-migrate 模型注释的使用

django-comment-migrate 的使用 django-comment-migrate 是一个 Django 应用&#xff0c;用于将模型注释自动迁移到数据库表注释中。它可以帮助您保持数据库表注释与模型定义的一致性&#xff0c;并提高代码的可读性。 安装 要使用 django-comment-migrate&#xff0c;您需要…

2864. 最大二进制奇数

2864. 最大二进制奇数 题目链接&#xff1a;2864. 最大二进制奇数 代码如下&#xff1a; //贪心算法 class Solution { public:string maximumOddBinaryNumber(string s) {int cntcount(s.begin(),s.end(),1);return string(cnt-1,1)string(s.size()-cnt,0)1;} };