有效的路径查找算法避免锯齿形[重复]

2023-12-27

I am developing a software which connects objects with wires. This wiring has a rule that these wires cannot pass on other objects and no diagonal move is accepted. like in this screenshot

我知道的所有最短路径算法(A*、dijkstra 等)都会找到这种类型的路径:

我不希望第二个屏幕截图中出现不必要的锯齿形。我如何实现这个目标?

注意:任何想尝试算法的人都可以使用this http://qiao.github.io/PathFinding.js/visual/应用。

Another Note: This is the exact situation that i do not want. It finds the zigzag path instead of the one "go to the right until the you reach x position of the target, go to the up until you reach the y position of the target" which has the same cost with the zigzagged one. enter image description here


您当前的算法找到一条最短路径,Pmin,但改进后的算法应该找到一条需要最少转弯数的最短路径(Pmin, Tmin)。一般解决方案要求您使用一对数字而不是单个数字。如果是新发现的Pnew小于当前Pmin或者如果它相等但是Tnew小于Tmin然后采取(Pnew, Tnew)作为新的最小路径。

如果棋盘足够小,您仍然可以使用当前使用的单个数字,但该数字必须是复合数字C = P * N + T, where N是足够大且足够小的常数。它必须大于该棋盘的最大可能 T,这几乎是棋盘中瓷砖的总数。它还必须足够小,以便当算法碰巧处理棋盘中的最大路径(也是棋盘中的图块总数)时不会出现整数溢出。所以N必须满足这两项(B 是棋盘中的棋子总数):

N > B
B * N < INT_MAX

If B is larger than SQRT(INT_MAX) then this system is unsolvable, and you should go with pair of values. N should be SQRT(INT_MAX), which for 232 is 216.

现在的主要问题是如何计算所有转弯,但这取决于您所拥有的算法。添加该部分应该不会太困难。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有效的路径查找算法避免锯齿形[重复] 的相关文章

  • 检索受“rowspan”影响的行的列索引的最有效方法是什么?

    考虑下表 table thead tr th th th A th th B th th C th tr thead tbody tr th 1 th td Apples td td Oranges td td Pears td tr tb
  • 删除队列中的最后一个元素

    我需要删除队列的最后一个元素 我唯一可以使用的操作是 Peek 获取第一个元素而不删除它 Enqueue element 向队列末尾插入一个元素 Dequeue 删除第一个元素 IsEmpty true 或 false 队列是否为空 而且我
  • 图中的后边

    I m having a hard time understanding Tarjan s algorithm for articulation points I m currently following this tutorial he
  • 固定大小集以包含给定集的最大数量

    我有大约 1000 组尺寸 1 4 1 3 3 5 6 4 5 6 7 5 25 42 67 100 是否有可能找到包含最大数量的给定集合的大小为 20 的集合 检查每一个100 80 20 集 效率低下 我不太确定这是 NP 完全的 考虑
  • 如何将一组重叠范围划分为不重叠范围?

    假设您有一组范围 0 100 一 0 75 b 95 150 c 120 130 d 显然 这些范围在某些点上重叠 您将如何剖析这些范围以生成不重叠范围的列表 同时保留与其原始范围相关的信息 在本例中为范围后面的字母 例如 运行算法后的上述
  • 最慢的计算复杂度(Big-O)

    在这些算法中 我知道 Alg1 是最快的 因为它是 n 平方的 接下来是 Alg4 因为它是 n 的立方 然后 Alg2 可能是最慢的 因为它是 2 n 这应该具有非常差的性能 然而Alg3和Alg5在我的阅读速度方面还没有遇到过 这两种算
  • 寻找将集合映射到整数的双射函数

    对于任意两个序列 a b 其中 a a1 a2 an 且 b b1 b2 bn 0a b具有相同的元素 而不关心它们的顺序 例如 如果 a 1 1 2 3 b 2 1 3 1 c 3 2 1 3 则 f a f b f a f b 我知道有
  • 将字符串中的“奇怪”字符转换为罗马字符

    我需要能够将用户输入仅转换为 a z 罗马字符 不区分大小写 所以 我感兴趣的角色只有26个 然而 用户可以输入他们想要的任何 形式 的字符 西班牙语 n 法语 e 和德语 u 都可以包含用户输入中的重音符号 这些重音符号会被程序删除 我已
  • 如何仅使用单个数组在 JavaScript 中模拟调用堆栈

    我正在看维基百科页面 https en wikipedia org wiki Call stack在调用堆栈上 并尝试理解这个图像 据我所知 哈哈 const memory memory 0 3 top of stack pointer m
  • 7 张牌扑克手牌评估器

    有谁知道评估 7 张牌扑克牌的快速算法吗 这比简单地暴力检查 7 张牌中每 21 个 5 张牌的组合更有效 Cheers Pete 我写了一篇JavaScript 核心评估方法仅使用位操作 因此速度非常快 考虑到这一点 查看 21 种组合还
  • 生成所有多集大小为 n 的分区的算法

    我一直在试图找出一种方法来生成多重集的所有不同的大小为 n 的分区 但到目前为止却空手而归 首先让我展示一下我想要实现的目标 假设我们有一个输入向量uint32 t std vector
  • C# 中的 strstr() 等效项

    我有两个byte 我想找到第二个的第一次出现byte 在第一个byte 或其中的一个范围 我不想使用字符串来提高效率 翻译第一个byte to a string会效率低下 基本上我相信就是这样strstr 在 C 中做 最好的方法是什么 这
  • 直接选择排序与交换选择排序

    有什么区别直接选择排序 vs 交换选择排序 今天我陷入了一场争论 我的教授在他的讲义中使用了这两个术语 维基百科和任何教科书或网站都会为您提供的选择排序就是他所说的 交换选择排序 我以前从未听说过 交换选择排序 这个术语 仅 选择排序 并且
  • 计算两点之间的最短路线

    过去几周我一直在开发一款多人 HTML5 游戏 使用nodejs and websockets 我已经被这个问题困扰了一段时间 想象一下 我用数组实现了这个平铺地图 如下所示 1 or 棕色瓷砖 路上有障碍物 玩家无法通过 0 or 绿色瓷
  • 大数据使用什么数据结构

    我有一个包含一百万行的 Excel 工作表 每行有 100 列 每行代表一个具有 100 个属性的类的实例 列值是这些属性的值 哪种数据结构最适合在这里使用来存储数百万个数据实例 Thanks 这实际上取决于您需要如何访问这些数据以及您想要
  • 两组点之间的最佳匹配

    I ve got two lists of points let s call them L1 P1 x1 y1 Pn xn yn and L2 P 1 x 1 y 1 P n x n y n 我的任务是找到它们点之间的最佳匹配 以最小化它
  • Java递归方法求阶乘返回负输出[重复]

    这个问题在这里已经有答案了 我知道这是溢出 但问题是 20 是相对较小的数字 这不应该发生 对吧 有没有更好的方法来查找大数 例如 1000 的阶乘 而不会得到这种奇怪的结果 public class RecursiveFunctionsE
  • 有没有时间复杂度为O(N)的排序算法?

    大多数排序算法的复杂度为 O NN 或 O NlogN 来实现结果 但是 对于特定的输入集 有些算法的复杂度为 O N 我想知道是否有一种排序算法在所有情况下都具有 O N 的复杂度 如果您只能比较 检查两个项目是否为 正在排序的值 那么您
  • 平铺单纯形噪声?

    我 作为业余爱好者 对伪随机噪声生成很感兴趣 特别是 Perlin 和 Simplex 算法 Simplex 的优点是速度 尤其是在更高的维度上 但 Perlin 可以相对容易地平铺 我想知道是否有人知道平铺单纯形算法 固定维度就好 泛型更
  • O(1) 算法确定节点是否是多路树中另一个节点的后代?

    想象一下下面的树 A B C D E F 我正在寻找一种方法来查询 F 是否是 A 的后代 注意 F 不需要是directA 的后代 在这种特殊情况下这是正确的 只需要针对更大的潜在后代节点池测试有限数量的潜在父节点 当测试一个节点是否是潜

随机推荐

  • 蟒蛇 |如何使用 Tkinter 进行快速反应测试?

    我尝试使用 Python 中的 Tkinter 模块制作一个快速反应测试器 但是当我单击Start按钮 它只是冻结窗口 我不知道如何恢复 这是我的代码 import webbrowser as wb import time import m
  • 使用 SQL 关键字作为列的别名

    我正在执行以下查询 但它给出语法错误 因为关键字key已在 SQL 中注册 SELECT id AS key country name AS value FROM countries 我也尝试过使用这样的括号 但它不起作用 SELECT i
  • 使用 Gradle 访问私有 Maven Github 包注册表

    我在用户下有一个私人存储库X和存储库名称Y https github com X Y https github com X Y 这是一个使用 Gradle 构建的 Java 项目 Gradle配置文件已经按照官方说明进行配置Github 包
  • 更改视角会导致弹出错误,调试视角不再起作用

    刚刚安装了 Eclipse Juno 从那时起就遇到了透视问题 除了编辑器窗口非常小并且仅限于显示的一个角落 在调试中 在 Java 透视图中没问题 之外 我在更改透视图时也会遇到错误 建议 如果我不能解决这个问题 我就会回到 Indigo
  • 如何在 ipython 笔记本中启用换行

    我一直在尝试在 ipython 笔记本中启用换行 我用谷歌搜索没有结果 然后我在终端中输入了 ipython notebook help 这为我提供了大量配置文件的配置命令 但没有换行 有谁知道 ipnotebook 是否有此功能 如果有如
  • 使用 os_unfair_lock_lock 进行快速访问竞争

    我制作了一个自定义属性包装器 它提供了一种使用互斥上下文访问数据的方法os unfair lock 在启用 TSAN 的情况下测试我的包装器后 在使用以下命令获取锁时报告了访问争用错误os unfair lock lock 如下图所示 不知
  • 如何配置每个 pod/进程使用不同的 kafka 主题分区

    我有一个有 5 个分区的 kafka 主题 我当前有 5 个 pod 正在使用这 5 个分区 但是 由于特定需求 我需要每个 Pod 仅从其分配的分区中进行消费 但由于 pod 在 kubernetes 上都具有相同的配置 我无法告诉每个
  • 组件和子组件

    我是 Vue js 新手 在使用带有子组件的组件时遇到了一些问题 我有以下内容 vue files app vue
  • 如何在 ActiveAdmin 视图中使用在控制器中定义的实例变量?

    我有这个 ActiveAdmin register User do controller do def show user User find params id show end end show do attributes table
  • 无法通过cmd运行C程序

    大家好 我正在学习 C 正在尝试弄清楚如何通过命令控制台 cmd 运行它 我已经安装了 eclipse 和 Mingw 并将它们添加到路径中 C MinGW bin C MinGW msys 1 0 bin 我在 notepad 上编写了这
  • 使用单个 Helm Chart 部署多个服务

    我是 helm 和 kubernetes 的新手 我当前的要求是使用通用舵图设置多个服务 这是场景 我有一个适用于所有服务的通用 docker 映像 对于每个服务 都需要运行不同的命令 总共有40多项服务 Example pipenv ru
  • 如何在 Visual Studio 中查找特定类的重载运算符的所有引用?

    如果我有一个包含重载 运算符函数的类 我如何找出整个代码中使用该重载运算符的位置 除了在重载的 方法中放置一个断点并查看代码是否命中它之外 我尝试转到 Visual Studio 中的类视图 右键单击该方法 然后选择 查找所有引用 但它声称
  • 在Excel中连接多个匹配项

    请看下面 我想将表 2 中的 注释 连接到表 1 中 如一系列图像所示 而不使用 TEXTJOIN 或宏 仅使用常规 Excel 函数 不使用 UDF 或辅助列就没有简单的解决方案 我建议使用 UDF 公式 它很容易在工作表中实现和使用 要
  • Vba 从互联网下载文件 WinHttpReq 登录不起作用

    我一直在寻找一种解决方案来自动从网站下载 csv 表 但我还没有找到可行的解决方案 如果我使用 IE 或 Chrome 在上次登录后输入网址 文件会自动开始下载 为此 我有另一种方法通过 IE 和 HTML 对象通过导航然后保存来实现我所需
  • 如何使 C-p 成为 Devel::PerlySense 的 Emacs 前缀键?

    我刚刚安装开发 PerlySense http search cpan org dist Devel PerlySense 0 0180 我已将以下内容放入我的 emacs 文件中 PerlySense load perly sense g
  • 滑动菜单 - 从右到左

    我正在尝试使用下面示例中的滑动菜单 https github com eddieringle android undergarment https github com eddieringle android undergarment 但这
  • SCons:获取原始文件的绝对路径(就好像我没有设置variant_dir一样)

    我可以用File foo bar abspath获取文件的位置 但如果我设置了variant dir 则返回的路径将位于variant dir而不是原始位置 如果我有duplicate 0设置 那么返回的文件实际上并不存在 显然 SCons
  • 运行 ImageMagick 将低质量 pdf 转换为图像(用于 OCR)的最佳参数是什么

    我有几个低质量的 pdf 文件 我想使用 OCR 更准确地说Ocropus http code google com p ocropus 从他们那里获取文本 要使用 我首先使用图像魔术师 http www imagemagick org s
  • 我的密码盐应该有多大? [复制]

    这个问题在这里已经有答案了 可能的重复 用户密码盐的最佳长度是多少 https stackoverflow com questions 184112 what is the optimal length for user password
  • 有效的路径查找算法避免锯齿形[重复]

    这个问题在这里已经有答案了 I am developing a software which connects objects with wires This wiring has a rule that these wires canno