首页
学习
活动
专区
工具
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。...所谓“控制”,通俗说就是指把水供到该更为困难,或者说该用水水压更低。因此,控制必然处在“距离水源更远、本身地理位置更高”位置。...支线起点水压标高:该位于干线上,在计算干线时已经确定; 支线终点水压标高:该地面标高+最小服务水头; 支线最大允许水力坡度:(起点水压标高 - 终点水压标高)、支线长度; 确定支线管径:由支线水力坡度需要通过流量...,可查表确定支线标准管径; 支线最优(最小)管径计算方法:支线取某管径算得水头损失 ≤ 支线起点水压标高 - 支线终点水压标高,满足以上不等式最小管径为支线最优管径。

    69730

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

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

    99010

    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; // 计算这条路上代价

    35020

    Dijkstra算法求单源最短路径

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

    2.4K10

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

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

    1.5K20

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

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

    3.2K31

    路径导航与启发式搜索

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

    1.2K10

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

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

    86220

    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,

    74710

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

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

    66520

    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是否为偶数来判断当前能否恰好在这么多步到达终点

    64640

    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 % 如果距离列向量中最大值大于阈值则进行下述操作

    1.9K30

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

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

    65720

    路径规划算法之A*算法

    路径规划是非常常见一类问题,例如移动机器人从A移动到B,游戏中的人物从A移动到B以及自动驾驶中,汽车从A点到B。...曼哈顿距离计算从当前节点横向或纵向移动到达目标所经过方格数,忽略对角移动。也就是说只通过朝上、下、左、右四个方向移动,抵达终点D最短距离。...例如,在平面上,坐标为(x1,y1)i与坐标为(x2,y2)j曼哈顿距离为d(i,j)=|x1-x2|+|y1-y2|。 要注意是,这里用曼哈顿方法计算H时要忽略路径中障碍物。...H值是通过估算该节点与终点曼哈顿距离得到,仅作横向纵向移动,并且忽略沿途障碍物。采用这种方式,我们可以看到起点S左边方格到终点D有5个方格距离,因此H=5。...这个方格上方方格到终点D有6个方格距离,所以H=6。 用同样方法可以计算出其他方格H值。

    42810
    领券