- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题在这里已经有了答案:
Knight's Shortest Path on Chessboard
(17 个回答)
7年前关闭。
是否有一个数学公式可以用来计算在无限 2D 网格中两点之间的最小骑士移动次数?我可以使用广度优先搜索来解决这个问题,但是我们可以使用封闭形式的表达式吗?
谢谢!
最佳答案
我认为没有一个公式可以为所有点对生成最小距离。
但是对于一些特殊的点有。
让 A,B 成为 2D 上的点 - 网格 A = (0,0)
和 B = (x,y)
和 dist(x,y)
最少的骑士移动次数。
首先,距离是对称的:dist(x,y) = dist(-x,y) = dist(x,-y) = dist(-x,-y) = dist(y,x)
2x=y
-> dist(x,2x) = x
x = 0
y = 4k
(k 是自然数)dist(x,y) = 2k
y = 4k+1
或 y = 4k+3
-> dist(x,y) = 2k + 3
y = 4k+2
-> dist(x,y) = 2k + 2
x = y
x = 3k
(k 是自然数)dist(x,y) = 2k
x = 3k+1
-> dist(x,y) = 2k + 2
y = 3k+2
-> dist(x,y) = 2k + 4
0 <= x <= y
)在任何情况下都不适合,您至少知道
dist(x,y) <= dist(x-k,y-2k) + dist(k,2k) = dist(0,y-2k) + k
和
dist(x,y) <= dist(x-z,y-z) + dist(z,z) = dist(0,y-z) + dist(z,z)
dist := proc(x,y)
global d;
local temp;
if x < 0 then x:= -x; fi;
if y < 0 then y:= -y; fi;
if x > y then temp := x; x:= y; y:= temp; fi;
if y = 2*x then return x; fi;
if x = y then
if x mod 3 = 0 then return 2*(x/3); fi;
if x mod 3 = 1 then return 2+2*(x-1)/3 fi;
if x mod 3 = 1 then return 4+2*(x-2)/3 fi;
fi;
if x = 0 then
if y mod 4 = 0 then return y/2; fi;
if y mod 4 = 1 or y mod 4 = 3 then return 3+(y - (y mod 4))/2; fi;
if y mod 4 = 2 then return 2+(y-2)/2; fi;
fi;
if y > 2*x then
return dist(0,y-2*x) + dist(x,2*x);
else
return dist(2*x-y,2*x-y) + dist(y-x,2*(y-x));
fi;
end proc:
O(1)
中运行(时间和空间)因为它有一个常数
O(1)
操作并最多再调用一次。
A
或
B
距离至少一个边界至少 1 行/列。
关于math - 最小骑士移动从一个方格到另一个方格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19485026/
我尝试运行稍微修改过的 horsemanjs 的示例代码: var Horseman = require('node-horseman'); var horseman = new Horseman()
我在 Isometric camera with THREE.js 中找到了有关如何创建(轴测)等距相机的示例,但如何创建轴测斜线? 最佳答案 您可以渲染带有倾斜的场景 cabinet perspec
我正在尝试在 horseman 的 evalute 函数中使用 promises。一个简单的例子: var Horseman = require('node-horseman'); var horse
我试图在调试期间查看 List<> 的内容。不幸的是我看不到它们,因为我在变量窗口中收到以下消息: corvalue.GetExactTypeSafe(out type). The object is
Rider IDE 通知我以下内容效率低下 transform.Translate(moveDirection * speed * Time.smoothDeltaTime); 并想将
是否有一种简单的方法可以在 Visual Studio 之外使用旧的 EF 来搭建脚手架迁移?如果可能的话,我想通过 Rider IDE 来完成。 最佳答案 对于 EF Core,您可以使用 http
在 Rider 中,当在断点处暂停时,有没有办法在调试器堆栈帧中实际显示“外部代码”? 在 Visual Studio 中,这可以轻松完成,但在 Rider 中似乎不可能。而且,是的,我启用了“exa
我试图通过更改其环境变量来修改 Linux 上 JetBrains Rider 中 .NET 项目的设置配置文件。但是,当我点击文件夹图标时,我无法点击添加、删除或修改任何环境变量。 我注意到在 Ri
只是试用 Rider 并遇到了这个问题,如果我只是构建 Xamarin Android 项目 - 它构建得非常好,但是如果我尝试运行它,它会在部署步骤失败并出现以下错误: ▼ Project Not
当我在 Jetbrains Rider EAP 21 中创建解决方案时,我在解决方案资源管理器窗口中收到“(缺少包)”错误。 然后,我尝试构建项目并获得 [MSB4057] 错误。 尽管如此,我可以通
我是一名优秀的程序员,十分优秀!