由简单转复杂的问题 (100分)

  • 主题发起人 主题发起人 DarwinZhang
  • 开始时间 开始时间
D

DarwinZhang

Unregistered / Unconfirmed
GUEST, unregistred user!
Windows自己有一个'排地雷'的游戏,
我搞了一个程序,能够按照我的思路去排雷,记录达到3秒以下。
现在,想和有兴趣的大富翁讨论一下如何使电脑能够从不会排雷到能够排雷。
先将'排地雷'游戏简化成30*16的二维数组:
A:Array [0..29,0..15]of Byte;
case A[i,j] of
0~8:该处已经显示: 空(0)或数值(1~8)
9: 该处已经标记为雷
10: 该处为未知区域
end;

开始程序直接的原则为:
1: 将未知区域(10)变成已知区域(0~9)
2: 数值0~9表示区域周围的地雷数目
3: 当目前无法判断时可以尝试
4: 猜的次数越少越好
5: 可以记录以前成功和失败的数据
6: 能根据以前的记录进行分类,归纳(可选)
最后,程序必须实现:
能越来越准确的排除地雷。
只要给出思路和详细算法就可以,不必写出源代码。不要灌水。
 
我这就有代码,不知道还在不在呀
 
我找到代码了,是用DELPHI做的,如果你要,就回个帖子!
 
我是想探讨一下,不是要代码!
这可不是一个几百行,几千行程序能解决的小问题,
请给出思路和算法步骤,谢谢!
 
恩,就是用数组结合递归判断
 
我是要使电脑能够从不会排雷到能够排雷,是能自我学习的程序,请看清问题!
 
>>从不会排雷到能够排雷,能自我学习
呵呵,难度!
我认为,“不会排雷”是指电脑只能通过某个点的值,孤立的进行分析,而不会自动进行
组合判断,并且在尝试的时候没有经验,不知道哪个容易成功;“会排雷”就是指电脑能够
进行组合判断,并且在尝试的时候能够选取成功率高的点。
如果说电脑能够根据过去的经验改善尝试时的成功率,我认为不难实现。但是要让它从不
会使用组合判断到会使用,这是一个质的飞跃,光靠积累经验是无法实现的,一定要在程序
中预先写好代码。当然,如果失去了组合判断的能力,我们还可以通过别的途径达到接近组
合判断的效果,而这个途径是要积累经验的。
通过对3-5个相邻的已知数值点周围的地雷出现的概率统计,我们可以实现极为精确的判
断。例如,出现了在一条直线上相邻排列的 a(1..8) 1 2 1 b(1..8)组合,那么就可以根据
历史统计信息发现两个1的下面必然有雷,而2的下面肯定没有雷。
我们可以发现,问题的关键变成了如何在解题过程中积累经验,并且在对积累下来得数据
进行适当的提炼之后,再次应用到解题过程中去。
对于本问题,我估计如果采用3-6个已知点作为经验的依据的方案,大约需要5^5个组合,
实际上,如果这几个点不在同一条直线上,还要记录位置信息。

(to DarwinZhang: 我已经在 1016791 向您道歉了,请您海涵。)
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部