首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

给定起点和终点以及距离,计算沿线的点

起点和终点以及距离,计算沿线的点,这是典型的旅行商问题。

解决旅行商问题的方法有暴力搜索法、动态规划法、遗传算法等。其中,动态规划法是最优解法,但时间复杂度较高,需要使用大量内存。遗传算法时间复杂度较低,但需要使用大量内存和计算能力。

如果要求最优解,建议使用动态规划法。如果要求快速解,建议使用遗传算法。当然,如果内存限制较低,建议使用暴力搜索法。

以下是使用动态规划法的示例代码:

代码语言:python
代码运行次数:0
复制
import sys

def distance(x1, y1, x2, y2):
    return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5

def dp(start, end, max_distance):
    dp_table = [[0] * (max_distance + 1) for _ in range(len(start) + 1)]
    for i in range(1, len(start) + 1):
        dp_table[i][0] = i
    for j in range(1, max_distance + 1):
        dp_table[0][j] = j
    for i in range(1, len(start) + 1):
        for j in range(1, max_distance + 1):
            if start[i - 1] == end[j - 1]:
                dp_table[i][j] = dp_table[i - 1][j - 1]
            else:
                dp_table[i][j] = min(dp_table[i - 1][j], dp_table[i][j - 1], dp_table[i - 1][j - 1]) + 1
    return dp_table[len(start)][max_distance]

def solve(start, end, max_distance):
    dp_table = [[0] * (max_distance + 1) for _ in range(len(start) + 1)]
    for i in range(1, len(start) + 1):
        dp_table[i][0] = i
    for j in range(1, max_distance + 1):
        dp_table[0][j] = j
    for i in range(1, len(start) + 1):
        for j in range(1, max_distance + 1):
            if start[i - 1] == end[j - 1]:
                dp_table[i][j] = dp_table[i - 1][j - 1]
            else:
                dp_table[i][j] = min(dp_table[i - 1][j], dp_table[i][j - 1], dp_table[i - 1][j - 1]) + 1
    return dp_table[len(start)][max_distance]

start = [1, 1]
end = [5, 4]
max_distance = 6
result = solve(start, end, max_distance)
print(result)

以上代码中,distance函数用于计算两点之间的距离,dp函数用于计算动态规划表,solve函数用于求解旅行商问题。最终的结果为旅行商问题的最优解,即最小距离。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 「给水管网工程」设计计算

    给水管网计算终结版 一、管网计算内容 1、设计计算工况 城市给水管网按照最高日最高时(Q_h)工况计算,求出所有管段的直径、水头损失、水泵扬程和水塔高度(当设置水塔或高位水池时),并分别按下列3种工况和要求进行校核...2、三种校核工况 消防校核:发生消防时的流量和水压的要求(消防时):Q_{二泵}=Q_h+Q_消最不利点自由水头为10M。...所谓“控制点”,通俗的说就是指把水供到该点更为困难,或者说该点用水的水压更低。因此,控制点必然处在“距离水源更远、本身地理位置更高”的位置。...支线起点水压标高:该点位于干线上,在计算干线时已经确定; 支线终点水压标高:该点地面标高+最小服务水头; 支线最大允许水力坡度:(起点水压标高 - 终点水压标高)、支线长度; 确定支线管径:由支线水力坡度和需要通过的流量...,可查表确定支线标准管径; 支线最优(最小)管径计算方法:支线取某管径算得的水头损失 ≤ 支线起点水压标高 - 支线终点水压标高,满足以上不等式的最小管径为支线最优管径。

    76030

    怎么在线上取起始点中点任意点?

    FME方式 这个之前就写过类似的了:【FME】使用FME沿线生成点(一)【FME】使用FME沿线生成点(二) 对于起始点和终止点,今天来介绍另一种方式:转换器VertexRemover 生成起终点的设置如下图所示...: 起点设置 终点设置 中间点的生成,见之前的沿线生成点1、2。...其实它还有一种如上图所示的keep模式,这种模式下的转换器就保留指定索引的节点,而不是移除。如上图起终点截图所示,0,-1就是起终点的节点索引。 转换器参数一调整,用起来也是非常灵活的!...(1) print(end_point.x,end_point.y) 可以看到,纯Python获取起点终点及中点,每种都只需要一行代码,非常简单。...我的QQ和微信交流群里,经常会有一些朋友问一些有意思的问题,这些问题有适合探索的、有适合研究的、也有一些初学者经常遇到的非常典型的…… 比如:如何找到并去除上图中的狭长面?

    1.1K10

    PAT 1030 Travel Plan (30分) Dijstra +Dfs

    条边组成的无向图,给出m条边的距离和代价,给定起点和终点,要求输出从起点到终点的最短路径、最短距离、以及最小代价。...这个题,本质上和 PAT 1018 Public Bike Management 是一样的,无非就是在Dijstra求最短距离的过程中保存最短路径上的前驱,再跟据DFS结合前驱得到全部最短路径,在此过程中计算每一条最短路径的代价...每一次从终点找到起点的路径都是一条最短路径,这其实就是一个DFS,计算这条路径的代价,如果更小,则更新最小代价并选择这条路径。...,d是终点 int n, m, s, d; // edge保存两个点之间的距离,min_dis保存起点到每个顶点的最短距离,cost保存每两个点之间的代价 int edge[501][501], min_dis...) if (v == s) { // temppath里保存了一条完整的路径,并且是从终点到起点 int tempcost = 0; // 计算这条路上的代价

    35820

    Dijkstra算法求单源最短路径

    然后以起点为中心向外层层扩展,计算所有节点到起点的最短距离。每次新扩展到一个距离最短的点后,更新与它有边直接相邻的节点到起点的最短距离。...顶点与有向边的索引均从0开始编号,这里要求连续,且保证索引不重复。 (2)起点与终点 程序运行过程中,输入起点和终点。...如果再给定任意非起点的节点作为终点,即可从起点到其它所有节点的最短路径找出起点到终点的最短路径,并且根据关系矩阵求出最短路径的长度。...: /************************************************** func:求给定终点的最短路径以及路径长度 para:matrix:图的邻接矩阵;startID...(3)本文的做法是将起点到其它所有节点的最短路径求出后再求给定的终点与起点之间的最短路径,其实可以不必如此。具体做法是在访问到给定的终点时,停止求起点到其它节点的最短路径,可提高算法性能。

    2.4K10

    最小生成树(MTS)之Kruskal算法

    最短路径问题 简单地说,就是给定一组点,给定每个点间的距离,求出点之间的最短路径。 路径问题大概有以下几种: 确定起点的最短路径问题:已知起始点,求起点到其他任意点最短路径的问题。...确定终点的最短路径问题:与确定起点的问题相反,该问题是已知终点,求最短路径的问题。...确定起点终点的最短路径问题:已知起点和终点,求任意两点之间的最短路径。即多源最短路径问题。 指定起点遍历所有节点的最短路径问题:已知起点,求从起点走过所有端点的最短路径问题。...思路: 先计算N单客户距离配送商户距离,起点固定为商户,终点为客户,然后比较N个路线中距离从小到大排列,即为最优路线。...每次需要将一条边添加到最小生存树时,判断该边的两个顶点的终点是否重合,重合的话则会构成回路 感谢B站UP主Compsyc计算之心精心制作的算法解题视频,第一次刷到此视频就被其生动的文案所打动,视频风格和制作都很用心

    1.6K20

    路径导航与启发式搜索

    同时,道路就用白色的点表示,建筑物是黑色的点,河流是黑色的点,但是河流上的桥梁是白色的点…… 在这样一张地图上,给定一个起点,给定一个终点,需要找到一条从起点到终点的合法路径,并尽可能使得这条路是最短的...之后,取这8个点的其中一个(因为这8个点距离起点都是1,所以都是最短的),继续找它的周围8个点,那么这些点的都是距离起点需要2步才能到达的。...算法实际上是分支界限和动态规划原理及使用下界范围的 相结合的算法。 首先令 就是最短路径算法中的评估值。也就是说, 始终是距离起点的距离。...在实际的代码过程中,我经过测试,发现对于100×100的规模的图,因为起点终点已经给定,所以直接使用第1种方案就已经得到了令人满意的结果。...但是明显的是,A*算法比最短路径算法少了很多搜索范围,因为他尽可能往目标方向走。 而局部搜索甚至不考虑距离起点的距离,一昧的往终点走,它的搜索空间就是最终答案,一点都不浪费。

    1.2K10

    关联线探究,如何连接流程图的两个节点

    并且这两个点是唯一能直接和起终点相连的点,所以我们可以把这两个点当做是“起点"和"终点”,这样在计算的时候可以少计算两个点: 在矩形移动事件里进行点的计算,首先缓存一下矩形的位置和尺寸信息,然后定义起点和终点的坐标...同样,伪起点和伪终点形成的矩形也会和终点元素包围框形成一个更大的矩形,这个矩形的四个顶点也是有可能会经过的,这当终点元素位于起点元素上方时会经过: // 伪起点和伪终点形成的矩形 和 终点元素包围框...,但是还有一种情况满足不了,当起终点相对时: 所以当前面计算的startEndPointVerticalLineIntersection点不存在的时候我们就计算经过伪起点和伪终点的一条垂直线和一条水平线的交点...计算出坐标点后再更新连线元素,记得要把我们真正的起点和终点坐标加上去: // 矩形移动事件 const onDragMove = () => { // 计算出所有可能的点 let { startPoint...,也就是跳过checkLineThroughElements这个方法,另外真正的起点和终点也要加入点列表里参加计算,并且计算的起点和终点也不再使用伪起点和伪终点,而是使用真正的起点和终点,不然会出现如下的情况

    3.3K31

    公路项目建设可视化进度管理

    新基建项目的开展将聚焦于城市轨道交通和城际高速铁路,新一代智能化高速铁路系统将广泛运用云计算、大数据、物联网、移动互联、北斗导航、GIS 和 BIM 等新技术。...铁路作为交通建设枢纽连接着城市间的距离,对人们的生活、出行便捷有着非常重要的意义。...2、施工点位标注功能 界面左上角的起点、隧道、终点、桥梁和路线五个施工目标按钮可以灵活使用,工程人员可以根据需求将工程点目标摆放在施工点位上。...3、工程点的经纬度查询功能 工程人员可以通过点击地图上的工程点来获取相应的名称、编号和经纬度信息;同样的,在输入框中输入精确的经纬度信息也可以在地图中找到相应的工程点。...而 HT 的轻量化方式在与传统的 GIS 和 BIM 技术上有了全新的改变: HT的轻量化、低成本,使企业不再需要购置笨重昂贵的 GIS 和 BIM 软件; 起点低、效果好,传统 Web 开发人员即可上手

    88220

    迪杰斯特拉(Dijkstra)算法(CC++)

    初始: 我们初始设有6个点,起点为a,终点为b,每个点到另一个点的距离如图所示,如果不能到达则为inf,Dis数组为起点到任意一点的最短距离,vis为标记数组,每次寻找最短距离。...第五步: 此时没有被标记的点且Dis数组中最小的值为1号点,那么标记1号点,1号点可以到达2、3号点,把1号点作为中转点,起点到达2号点的距离为14+7=21起点到达2号点的距离为14+...对于一个给定的图,可能有多个 Dijkstra 序列。 例如,{5,1,3,4,2} 和 {5,3,1,2,4} 都是给定图的 Dijkstra 序列。...注意,序列中的第一个顶点即为指定的特定源顶点。 你的任务是检查给定的序列是否是 Dijkstra 序列。 输入格式 第一行包含两个整数 N 和 M,表示图中点和边的数量。 点的编号 1∼N。...,唯一不同的就是每一步选取一个最短距离的点,与给定的序列顺序比较是否为一致。

    41010

    公路项目建设可视化进度管理

    新基建项目的开展将聚焦于城市轨道交通和城际高速铁路,新一代智能化高速铁路系统将广泛运用云计算、大数据、物联网、移动互联、北斗导航、GIS 和 BIM 等新技术。...铁路作为交通建设枢纽连接着城市间的距离,对人们的生活、出行便捷有着非常重要的意义。...2、施工点位标注功能 界面左上角的起点、隧道、终点、桥梁和路线五个施工目标按钮可以灵活使用,工程人员可以根据需求将工程点目标摆放在施工点位上。 ?...3、工程点的经纬度查询功能 工程人员可以通过点击地图上的工程点来获取相应的名称、编号和经纬度信息;同样的,在输入框中输入精确的经纬度信息也可以在地图中找到相应的工程点。...而 HT 的轻量化方式在与传统的 GIS 和 BIM 技术上有了全新的改变: HT的轻量化、低成本,使企业不再需要购置笨重昂贵的 GIS 和 BIM 软件; 起点低、效果好,传统 Web 开发人员即可上手

    67520

    DFS中的奇偶剪枝学习笔记

    奇偶剪枝学习笔记 描述 现假设起点为(sx,sy),终点为(ex,ey),给定t步恰好走到终点, s | | | + — — — e 如图所示(“|”竖走,“—”横走,...那么我们给的例1, 起点 s 的坐标为(1,1),此点为“0”; 终点 e 为(5,5),此点为“0”。 所以t=8,为偶数。...注意到,(1,5)点和起点 s (1,1)都是 0,也就是说,这个 extra 必然是偶数!...再看例2,同样从终点 e 开始耗费 t=7 步, 则所到的点一定是 0 (不管她在哪里),再从这个点回到起点 s ,所用的 extra 也必然是个偶数!...所以无论如何,sum= t + extra ( extra>=0 ) 中的 extra 都是一个偶数 那么我们就可以用公式 t-[abs(ex-sx)+abs(ey-sy)] 计算出extra是否为偶数来判断当前点能否恰好在这么多步到达终点了

    65940

    A星寻路算法详解

    启发函数 H 代价的大小取决于计算 H 代价的函数,又被称为启发函数(Heuristic Function)。常用的启发函数包括曼哈顿距离和欧几里得距离。...: 初始化: 设置起点和终点,定义两个队列 openList 和 closeList,openList 中存储待探索网格点,closeList 中存储已经探索过的网格点。...初始化起点的G值和H值为 0,并将起点加入到 openList 中,如果有障碍物网格点,需要将障碍物网格点加入 closeList 中。...找到当前网格周围的节点: 根据当前网格点,找到其相邻的所有可行节点(不包括障碍物点),计算它们的 G 值 、H 值和 F 值,对每个相邻节点进行以下操作: 判断终点: 每次加入节点到 openList...其中,起点上下左右四个网格的 G 值为 10,对角线四个网格的 G 值为 14,8 个网格的 F 值采用曼哈顿方法进行计算,也就是待计算网格到终点的水平距离*10 + 待计算网格到终点的垂直距离*10,

    1.6K10

    GPS抽稀之道格拉斯-普克(Douglas-Peuker)算法

    (这里暂且称之为左曲线和右曲线),将这两段曲线想象成独立的曲线然后重复操作(1),找出两边的最大阈值点,如图所示: (3)最后,重复操作(2)(1)直至再也找不到最大阈值点为止,然后将所有最大阈值点按顺序连接起来便可以得到一条更简化的...(1,1);pointsTab(1,2)]; % 起点坐标对的列向量表示(为了便于点到直线距离计算的表示方法) Q2 = [pointsTab(r,1);pointsTab(r,2)]; % 终点坐标对的列向量表示...(作用同上) % 遍历这个扫描线,依次计算每个点到扫描线起点终点连线的距离================== for i = 1:1:r P = [pointsTab(...i,1);pointsTab(i,2)]; % 当前点坐标的列向量表示 d(i,1) = abs(det([Q2-Q1,P-Q1]))/norm(Q2-Q1); % 计算点到直线的距离...end % 计算完毕,每个点到直线的距离存入列向量d中================================ if max(d) > Threshold % 如果距离列向量中最大值大于阈值则进行下述操作

    2.2K30

    基于三维向量对的乱序堆叠物体的位姿识别

    所提出的方法使用“3D向量对”具有相同的起点和不同的终点,并且它具有表面正态分布作为特征描述符。通过考虑向量对的可观察性,提出的方法已取得较高的识别性能。...相关方法 1.三维向量对的结构 一般来说,对于一个物体的刚性变换仅仅需要三个3D点来表示即可,三维向量对的三个点有相同的起点和不同的终点。向量对结构如图1所示: ?...图1 三维向量对的结构 向量对V有相同的起点P和不同的终点和,位置矢量和分别由和表示,和之间的角度为,向量对的特征用等式1来计算: ? 其中、和为P、和的法向向量,n为的法向量。...3.利用可视性来提取向量对 a.可视性的定义 通过使用一个目标物体来表示点云,物体表面的可视性受深度测量方法、传感器的内部影响、传感器到物体的距离、观测点的方向和物体的形状的影响。...图2 投影平面以及可视点 b.可视性的计算 对象模型的可视性是通过每个表面的点云随机处理来实现的,点p的可视性由公式(5)来计算。 ?

    68420
    领券