拼图解算算法 - 需要的建议

时间:2017-03-04 01:16:57

标签: algorithm sorting search artificial-intelligence puzzle

鉴于以下字母以圆形图案排列。

    A
B       E 
  C   D

每个字母可以与任何相反的字母合并以形成相邻的字母。 e.g。

A + C = B + B
A + D = E + E

B + E = A + A
B + D = C + C

C + A = B + B
C + E = D + D

D + B = C + C
D + A = E + E

E + B = A + A
E + C = D + D

现在给出以下字符网格:

D A C
B E A
A B E

使用以下坐标:

{0,2} {1,2} {2,2}
{0,1} {1,1} {2,1}
{0,0} {1,0} {2,0}

目的是合并相邻的字符,直到所有字符变为 A

可能的解决方案是:

1。 D {0,2} + A {1,2} = E

E E C
B E A
A B E

2。 C {2,2} + A {2,1} = B

E E B
B E B
A B E

第3。 E {0,2} + B {0,1} = A

A E B
A E B
A B E

4。 E {1,2} + B {2,2} = A

A A A
A E B
A B E

5。 E {1,1} + B {2,1} = A

A A A
A A A
A B E

6。 E {1,0} + B {2,0} = A

A A A
A A A
A A A

我正在开发一种算法,可以通过编程方式解决这些类型的问题,从3x3一直到10x10网格。字母数量或规则如何合并将不会改变。

我目前有一种运行良好的算法,但远非完美。以下是每次迭代的步骤:

    1. 查找字母C或D的所有实例。构建一组将C或D转换为B或E的移动。
    1. 根据以下标准对移动列表进行评分和排序:
      • 一个。每个E的添加分数至少有1个相邻的B
      • 湾每个E的减去分数,其中至少有1个相邻的B,反之亦然
    1. 选择顶部移动,执行然后重复,直到满足步骤4中的条件。
    1. 如果所有字母都由A或E组成,其中1个匹配相邻B,则将所有E与B合并并完成拼图

我是程序员和游戏设计师,但我在算法,数学或AI方面根本没有背景。我已经从一个"聪明的人类玩家会做什么"观点。

任何想法都会非常感激!

0 个答案:

没有答案