我需要一些帮助为以下问题find一个好的启发式: 给你一个R by- C格子和一个六面骰子。 让start和end在这个网格上是两个不同的单元格。 从头到尾找出一条path,使得当死亡沿path转向时,抬头的面的总和最小。 模具的起始方向如下(“2”朝南): 我模拟这个问题的方式是将模具面部的价值作为graphics边缘的成本。 graphics的顶点的forms是(row, col, die) (即网格中的一个位置和die的当前状态/方向)。 顶点不是简单的(row, col)的原因是因为你可以结束在同一个单元与多个configuration/方向的骰子。 我用A *find解决问题的办法; 给出的答案是正确的,但效率不够高。 我确定问题是我正在使用的启发式。 目前我使用曼哈顿距离,显然是可以接受的。 如果我将启发式乘以一个常量,那么它就不再是可以接受的了:它的运行速度要快得多,但并不总能find正确的答案。 我需要一些帮助来find一个比曼哈顿距离更好的启发式。
任何人都有一个很好的经验法则来selectJava Collection接口的不同实现,比如List,Map或Set吗? 例如,一般为什么或在什么情况下我会喜欢使用Vector或ArrayList,Hashtable或HashMap?
在一个塔防游戏中,你有一个NxM网格,有一个开始,一个完成和一些墙。 敌人从起点到终点都走最短的路,而不经过任何的墙(它们通常不会被限制在网格中,但是为了简单起见,我们假设它们是无论如何都不能穿过对angular的“洞”) 问题(至less对于这个问题)是放置K个额外的墙壁,以最大化敌人必须采取的path。 例如,对于K = 14 我的直觉告诉我,如果(正如我所希望的那样)这个问题是NP难的,我们把这个问题推广到包括在到达终点之前必须访问的路点,也可能没有路点。 但是, 有没有什么像样的启发式algorithm可以接近最优解? [编辑]我在这里发布了一个相关的问题。
有一个大小为N×M的网格。 一些细胞是由“0”表示的岛 ,其他是水 。 每个水细胞上都有一个数字,表示在该细胞上制造的桥梁的成本。 你必须find所有岛屿可以连接的最低成本。 如果单元格共享边或顶点,则该单元格将连接到另一个单元格。 什么algorithm可以用来解决这个问题? 编辑:如果N,M的值非常小,比如说NxM <= 100,那么什么可以用作蛮力方法呢? 例如 :在给定的图像中,绿色的单元格表示岛屿,蓝色的单元格表示水,浅蓝色的单元格表示应在其上创build桥梁的单元格。 因此对于下面的图片,答案将是17 。 起初我想把所有的岛屿都标记为节点,并用最短的桥梁连接每一对岛屿。 然后问题可以减less到最小生成树,但在这种方法中,我错过了边缘重叠的情况。 例如 ,在下图中,任意两个岛之间的最短距离是7 (用黄色标记),所以使用最小生成树的答案是14 ,但答案应该是11 (用浅蓝色标记)。
启发式和algorithm之间有什么区别?
我发现了许多关于吃豆子的幽灵的AI,但是他们没有一个提到吃豆子被吃掉的鬼魂是怎么回到中央幽灵洞的。 在我的实现中,我实现了一个简单但可怕的解决scheme。 我只是硬编码在每个angular落应该采取的方向。 有没有更好的或最好的解决scheme? 也许是一个通用的不同级别的devise?