前言
如果我们遇到路径问题,可以使用点点连线,给定一个点,可以到达另外几个点,寻找最优解
例:如下图所示,如果要从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, -- 内场点位Id
ptname 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);
if (pilot == null)
{
throw new InterfaceException("请求参数错误");
}
string[] values = pilot.PtName.Split(',');
if (values.Length != 2)
{
throw new InterfaceException("请传入两个点");
}
string inPoint = values[0];
string terminus = values[1];
Sys_PilotDtl pilotDtl = _paramsDal.<