|
1
3
我想这样的办法行得通:
这只需遍历每个正方形并检查它是否有您的块,以及它是否是一个可移动类型的块。然后它检查周围的空间,看看是否有敌人的碎片,或一个没有被封锁的空间。如果它找到一个,我们知道仍然有左移,所以我们退出。 最坏的情况是,你检查每个空间和每个邻居(大约500张支票),这真的不算什么。当你数到每一块的时候,你可以数得更快,如果你达到剩下的块数,你也可以退出。 |
|
|
2
4
Stratego的动作规则非常基本。有两个州。可以移动,也应该移动。 动起来很容易。可以移动实际上是一个简单的空间检查。 为什么不干脆:
显然,旗子和炸弹“可以移动”的程序总是返回false。这对童子军有效,因为他们需要至少一个空格来移动,所以这是有意义的。 唯一不能追踪的是“后退5倍”的限制,但这并不难。 最后:
这几乎不是一个昂贵的过程。 |
|
|
3
1
我看不出威尔的答案会太贵的原因,但我会提供另一个想法只是为了笑一笑。一个选择是维护一个当前可移动的片段列表,每个玩家一个列表。检查一个玩家是否没有剩余的移动,就像查看列表的当前大小一样简单。 然而,代价是你必须在每次移动时都保持列表。一个棋子的移动可以打开它周围的任何棋子,以及自由的棋子。从概念上讲,你可以看到,这比检查黑板上的每一个正方形要困难得多。 |
|
|
4
1
我认为计算自由在这里可能是有意义的。 这样做的目的是要计算出你的集体作品能朝哪个方向发展。这相当于与你的可移动棋子相邻的开放方格或敌人棋子(可用方格)的数量。如果一个可用的正方形被你的一个以上的块触摸,那么它将被多次计数。我们将每个可用的正方形/潜在移动方向称为自由。 你从计算初始自由的数量开始。你只需数一下前排不沾水的活动件的数量。没有其他部件可以移动,每个部件只有一个可以移动的方向。 之后,更新自由数的算法相当简单。你计算旧位置的自由度,减去它阻塞的碎片数,再计算新位置的自由度,再减去它阻塞的碎片数。你把它加到总自由中,你就有了新的价值。 我有一段时间没有编码Java,所以我的例子将在伪代码/Python中,但是这个想法应该被转移。
当对手移动他的棋子时,你的自由不能改变。既不
如果你的文章被删除了,你只需要运行相同的算法,但是删除
现在,如果
如果强制执行防止移动重复的规则,这就不太有效。我不知道你要怎么实现。如果你想知道哪些部分是不允许移动的,你可以简单地将自由的总数与它们的自由进行比较,而不是与
如果我读了正确的重复规则,一次只能有一块不能移动,因此只有一组你必须考虑的自由。
|
|
|
5
0
需要注意的是,这里的所有算法要么忽略边界条件,要么检查它们。另一个可能的方法是把你的木板做成12x12,然后在边缘放些水。你必须在所有代码中解释这个,但是如果你有
我认为有了这个,所有的算法都会简单得多,而不会使访问这些片段变得复杂。 |
|
|
feasega · 聚合物模拟-2个节点之间的最短路线,适用于所有节点 1 年前 |
|
|
Alisa Petrova · 在有向图中更改一对顶点以创建循环 1 年前 |
|
|
b39b332d · 使用C++标准库实现高效间隔存储 2 年前 |
|
ABGR · 二叉树的直径——当最长路径不通过根时的失败案例 2 年前 |
|
|
EpicAshman · 数独棋盘程序中同一列和同一行出现两次的数字 2 年前 |