【发布时间】:2015-01-23 09:02:55
【问题描述】:
我有一个网格,网格有两个“材料”-
- 地板
- 墙
例如:
在这个网格中,我们有具有大小和位置的对象(对象的位置是左上角)。
在每个对象上我们可以做一些动作,比如 -
- 向上移动
- 向下移动
- 向左移动
- 向右移动
- 转动对象(相对于左上角)
我需要创建一个函数来返回我需要对一个对象执行的最小操作量,以便将它从一个点移动到另一个点(我只需要操作量)。
我使用dijkstra's algorithm 解决了这个问题,但没有转弯动作。
那么任何人都可以帮助我构建这个功能。
问题示例 -
起点——
终点
而且我需要返回我需要对一个对象执行的最少操作量。
【问题讨论】:
-
哪种语言(c++,c,vb.net,java,c#)并不重要
-
提示:考虑您的对象在任何时间点的状态。除了通常的 (x, y) 坐标之外,您还需要记录什么?四个方向移动每个都改变状态的 x 或 y 坐标;转弯会改变什么?
-
转弯移动会像这样改变物体的大小 - Size = Reverse(CurrenSize), Height=Width and Width=Height
-
我的意思是:不要再将图中的顶点视为字面上代表迷宫中的所有位置;它们代表对象可以处于的所有可能的状态。对象状态的一部分是它的(左上角的)位置,但这不是它的全部 .
-
你能告诉我们更多关于动作的细节:除了方向,你能移动多少?它是固定的吗(例如向左移动 -> 将左上角的
x位置增加lambda)?旋转也是如此。我们有哪些选择?这将是“k.q° 的任何旋转,其中 k 是整数,q 是固定常数。因此问题变成:什么是 q?
标签: java vb.net algorithm graph-algorithm