打豆豆最优解算法

jiashie 2016-11-08 09:44:37

规则:一个N*M的方阵,每个格子都可能有0到1个豆豆。豆豆有颜色的区别。
游戏者每次必须点击一个空格
此时在四条十字线的延伸方向上最先遇到的豆子中,如果有同色的,那么就可以把这些同色的打掉。

请教这里的大神,怎样找出最优解,使最后剩余豆豆最少,(且步数最少)。
已将上图转化为二维数组0表示空,其它颜色按赤橙黄绿青蓝紫灰的顺序分别用1-8表示。
8, 8, 3, 0, 0, 7, 0, 0, 8, 0, 8, 0, 6,
6, 7, 0, 6, 1, 0, 6, 0, 0, 0, 2, 0, 0,
0, 0, 2, 0, 6, 5, 1, 3, 0, 3, 0, 6, 0,
0, 2, 0, 6, 5, 7, 7, 0, 1, 6, 1, 1, 1,
3, 2, 0, 8, 0, 0, 0, 5, 7, 0, 7, 2, 0,
7, 8, 2, 3, 0, 0, 0, 8, 0, 0, 0, 5, 0,
0, 5, 8, 4, 5, 7, 0, 7, 4, 6, 2, 0, 3,
2, 1, 1, 1, 0, 0, 5, 2, 3, 2, 0, 0, 3,
5, 0, 4, 5, 0, 4, 0, 0, 6, 0, 4, 0, 3,
0, 0, 8, 0, 3, 8, 0, 0, 4, 1, 0, 7, 7,
0, 0, 8, 3, 6, 4, 4, 2, 0, 0, 5, 4, 0,
1, 0, 0, 0, 8, 1, 0, 5, 0, 0, 4, 4, 2,
0, 0, 5, 0, 0, 0, 7, 4, 0, 6, 3, 0, 0,

我用最笨的办法碰巧找到一个全消除的解法。但是该算法很不可靠,常常导致剩余很多豆豆相互阻隔无法全部消除。
Point(9, 5)
Point(9, 4)
Point(9, 4)
Point(6, 9)
Point(6, 11)
Point(6, 7)
Point(6, 7)
Point(9, 11)
Point(5, 12)
Point(6, 10)
Point(3, 9)
Point(3, 9)
Point(8, 1)
Point(8, 5)
Point(9, 5)
Point(9, 2)
Point(4, 10)
Point(5, 11)
Point(11, 7)
Point(12, 7)
Point(10, 7)
Point(12, 7)
Point(10, 6)
Point(8, 1)
Point(11, 8)
Point(2, 1)
Point(11, 7)
Point(7, 7)
Point(11, 1)
Point(11, 8)
Point(3, 1)
Point(4, 10)
Point(4, 4)
Point(10, 11)
Point(12, 3)
Point(12, 3)
Point(10, 2)
Point(6, 6)
Point(5, 12)
Point(11, 6)
Point(10, 6)
Point(1, 8)
Point(12, 2)
Point(2, 4)
Point(1, 3)
Point(5, 5)
Point(2, 4)
Point(3, 0)
算法处理结束,需要点击48次, 剩0个。

本来想着用暴力遍历的方法,但试了一下,数据量太大。
...全文
393 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bree06 2016-11-11
  • 打赏
  • 举报
回复
bree06 2016-11-11
  • 打赏
  • 举报
回复
第一眼感觉使用广度优先. 不像迷宫这类题, 墙体是不能被拆除的, 所以节点拓展是固定的, 这里的消除会直接影响下一步拓展. 并且没有办法提前得知当前的消除是否会引起最终能否被完全消除...很麻烦的. 目前暂时只将UI画出来了, 用鼠标点击是可以消除的, 缺AI. 继续研究
bree06 2016-11-10
  • 打赏
  • 举报
回复
你这个是在直线上的颜色相同才消除还是十字线上只有碰到相同颜色就消除? 0 1 2 1 0 1 4 3 1 比如上面这样, 我点中间的0是消除第2行的两个1? 还是连第1行中间的1也消除?
jiashie 2016-11-10
  • 打赏
  • 举报
回复
引用 3 楼 bree06 的回复:
你这个是在直线上的颜色相同才消除还是十字线上只有碰到相同颜色就消除? 0 1 2 1 0 1 4 3 1 比如上面这样, 我点中间的0是消除第2行的两个1? 还是连第1行中间的1也消除?
十字线上只要有碰到相同颜色就消除。
nikyotensai 2016-11-09
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
我的天,看的头疼

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧