请教扫雷人工智能的算法

时间:2022-12-11 07:47:34

     最近要写个自动扫雷的程序,苦于AI算法,望有高手加以指点。

15 个解决方案

#1


扫雷应该不用什么复杂的算法.
他有很多定式,按照定式做就行了.

#2


百万奖金征解"扫雷"难题  

 
(2000年11月7日 18:58)  
 

 
  
    大洋网讯    据北京晚报报道:“微软”“视窗”操作系统中自带的游戏“扫雷”,隐藏着一个被美国“克莱数学学院”悬赏100万美元解答的数学难题。

  提出这一理论的英国伯明翰大学数学教授理查德·凯的灵感就是从玩这个貌似简单的扫雷游戏开始的。凯提出的理论是,由于扫雷游戏同数学难题“PversusNP”之间内在的惊人相似性,因此通过研究扫雷的规则,就能解答这道至今仍然困扰着世界所有数学家的难题。

  玩扫雷游戏的游戏者努力在最短的时间内,在一个有很多小方块组成的方形区域内,标出电脑埋下的所有地雷所在的位置。每个小方格内的数字都代表围绕着这个格子有多少颗地雷。在玩了几周这个游戏后,凯意识到,如果在一个比电脑能提供的“方形区域”更大的“场地上”玩这个扫雷游戏,或者说将玩这个游戏的规则推而广之,那么就可以把玩扫雷游戏同解决“PversusNP”这道难题联系起来。

  凯的发现可能会给数学家们提供一条新的思路,从而对世界数学产生重大影响。为此,“克莱数学学院”将在下周三专门为凯的理论举行一次演讲。  

   

#3


最简单的就是搜。

1。蒙。蒙出雷就完蛋,蒙出一个就继续蒙,一直到蒙出一块为止。
2。搜。对每一个知道数字的点,搜索其8个方向上的点有多少个不知道数字的,如与点上的数字相符,则把所有不知道数字的都标成雷。对每个雷的八个方向上的点,如果有知道数字并且数字已经和旁边雷数相符的,则将该点周围的点都标为非雷并求其数字(把它点开)。
3。如果到了搜不出来的时候,就继续蒙。
4。扫雷的高级技巧也是可以写到程序里去的,但是有一点麻烦,还是先写上面这些把。

#4


评论:挖“地雷”能挖出百万美金吗


  

2000-11-15 09:29:29


--------------------------------------------------------------------------------


 
     您知道吗,平时为打发时间才玩的“扫雷”游戏能够解决P对NP这一悬赏百万美金的“千禧”数学难题,日前,英国伯明翰大学数学教授凯伊公布了这一线索,不过,清华大学计算机系黄连生教授认为,解决“千禧难题”需要更新的数学概念,而不是在现有理论上大量运算。

  据悉,凯伊教授是在偶然接触到“扫雷”游戏后蹦出这一想法的,他表示:“我一向对带有数学要素的游戏感兴趣,数学和游戏是存在默契的,我突然想到在‘扫雷’后面可能有一个很棒的数学原理,如果把它放在一个更大的格子图中来玩,并决定所有地雷组合的运算,就可能解出P对NP这一难题,这样一来像计算机密码这类问题就可迎刃而解。”而美国麻省克莱数学学院已将P对NP问题和另外六个难题一起并列为“千禧难题”,还准备了100万美金的奖金。

  记者从清华大学计算机系黄连生教授处了解到,“P对NP是一个运算复杂性问题,它试图判定一些我们在短期内看似无法解决的问题,实际上存在一个相当简单的解决办法,只是尚未被我们发现。目前,我们熟知的P对NP问题就有几百个,扩展起来就更多了,因此如果P对NP问题解决了,全世界的数学家和计算机学家都要放假三天”。

  不过黄教授表示:“凯伊教授的解法只是存在可能,如果将格子放到无限大的话,从排列组合的角度讲很可能造成指数爆炸,而无法算出结果,至于密码问题,即使是P对NP问题解决了也无法破解像量子密码这样的计算机密码,所以我认为,解决‘千禧难题’需要更新的数学概念,而不是在现有理论上大量运算。”(本文采写樊宏)

#5


FT! 
上面两篇报道中的记者对P,NP是什么都不知道,就在那里胡说八道:(

#6


不过数学家为扫雷设大奖确有此事

#7


什么NP啊,那么麻烦干吗?用下面的算法就够了。

以下算法,在葛永的自动扫雷软件中获得

简单推理
简单推理有两条:

1.点开(common dig).例:若某一格里是数字2,而它周围正好有2个已标为雷的格子,则点开该格子.
2.标记(common mark).例:若某一格里是数字4,而它周围可能是雷的格子(未知,已标为雷)总共只有4个,则将它周围未知的格子标为雷.

高级推理

砀呒锻评硪灿辛教?
1.最多-最少-点开(Most-Least-Dig for A,B).设有相邻关系的两个格子中分别写着数字A和B.设仅和A相邻的区域为NA,仅和B相邻的区域为NB,和A,B都相邻的区域为PAB.A区域中标为雷的和未知的共有a个格子,B区域中标为雷的有b个格子.推理:看格子A.既然PA区域中最多只有a个雷,因此PAB区域中至少有A-a个雷.再看格子B.既然PAB区域中至少有A-a个雷,再加上PB区域中的b个雷,那么我们已知的B周围的雷已经有了A-a+b个了.若A-a+b=B,那么我们就知道B周围的所有雷了:PAB区域中有A-a个,PB区域中有b个.因此,PB区域中未标为雷的未知格子不可能是雷,可以把它们全部点开!

2.最少-最多-标记(Least-Most-Mark for A,B).设有相邻关系的两个格子中分别写着数字A和B.设仅和A相邻的区域为NA,仅和B相邻的区域为NB,和A,B都相邻的区域为PAB.A区域中标为雷的有a个格子,B区域中标为雷的和未知的共有b个格子.推理:看格子A.既然PA区域中已有a个雷,因此PAB区域中最多有A-a个雷.再看格子B.既然PAB区域中最多有A-a个雷,而PB区域中最多有b个雷,因此B周围最多有A-a+b个雷。若A-a+b=B,那么我们就知道B周围的所有雷了:PAB区域中有A-a个,PB区域中有b个.因此,PB区域中未标为雷的未知格子一定是雷,可以把它们全部标为雷!

高级推理分为三个部分(每个部分分别使用上面两条高级推理规则):四邻推理(4-neighbour reasoning)、角上四邻推理(corner-4-neighbour reasoning)和外部16邻推理(outer-16-neighbour reasoning)。如下图:
     #           # #            #####
    #*#           *             #   #
     #           # #            # * #
                                #   #
                                #####
    4-邻       角上4-邻       外部16-邻

其中*是指一对接受推理的格子中的一个(就是上面的A),#是另一个格子(就是上面的B)相对于*可能的位置。

试验表明,简单推理加上4-邻高级推理可以解决90%以上的问题。简单推理加上所有高级推理可以解决几乎所有问题(但是外部16-邻推理的速度要比其他慢一些)。

#8


我觉得相对而言最困难的地方是点到一个四周雷数为0的方格,
这里用递归比较方便吧

#9


saint001(saint001),你贴的两篇报道信息量不足,能否详细介绍一下?

#10


到下面几个地方看一下
http://www.claymath.org/prizeproblems/milliondollarminesweeper.htm

http://www.mat.bham.ac.uk/R.W.Kaye/minesw/ordmsw.htm

http://www.wschnei.de/puzzles/minesweeper.html

也许都不是官方网址

#11


gz

#12


谢谢,我用了简单推理加四邻推理,效果不错,不过16邻是怎么弄的?

还有我写点到空块向四周扩散的函数时用递归总会遗漏,最后只要用穷举遍历做了

#13


16邻和4邻的差不多,我做这个的时候没用递归,我是反复按行列检查每个格的状态,直到不再有任何一个格的状态发生变化,
这是我以前做的扫雷的程序
http://download.enet.com.cn/file/game/puzzles/2001022601.shtml
需要的源代码的话,可以给你

#14


不明白。

#15


寒冰同志的扫雷程序我用了。好像成功的纪律很小。

#1


扫雷应该不用什么复杂的算法.
他有很多定式,按照定式做就行了.

#2


百万奖金征解"扫雷"难题  

 
(2000年11月7日 18:58)  
 

 
  
    大洋网讯    据北京晚报报道:“微软”“视窗”操作系统中自带的游戏“扫雷”,隐藏着一个被美国“克莱数学学院”悬赏100万美元解答的数学难题。

  提出这一理论的英国伯明翰大学数学教授理查德·凯的灵感就是从玩这个貌似简单的扫雷游戏开始的。凯提出的理论是,由于扫雷游戏同数学难题“PversusNP”之间内在的惊人相似性,因此通过研究扫雷的规则,就能解答这道至今仍然困扰着世界所有数学家的难题。

  玩扫雷游戏的游戏者努力在最短的时间内,在一个有很多小方块组成的方形区域内,标出电脑埋下的所有地雷所在的位置。每个小方格内的数字都代表围绕着这个格子有多少颗地雷。在玩了几周这个游戏后,凯意识到,如果在一个比电脑能提供的“方形区域”更大的“场地上”玩这个扫雷游戏,或者说将玩这个游戏的规则推而广之,那么就可以把玩扫雷游戏同解决“PversusNP”这道难题联系起来。

  凯的发现可能会给数学家们提供一条新的思路,从而对世界数学产生重大影响。为此,“克莱数学学院”将在下周三专门为凯的理论举行一次演讲。  

   

#3


最简单的就是搜。

1。蒙。蒙出雷就完蛋,蒙出一个就继续蒙,一直到蒙出一块为止。
2。搜。对每一个知道数字的点,搜索其8个方向上的点有多少个不知道数字的,如与点上的数字相符,则把所有不知道数字的都标成雷。对每个雷的八个方向上的点,如果有知道数字并且数字已经和旁边雷数相符的,则将该点周围的点都标为非雷并求其数字(把它点开)。
3。如果到了搜不出来的时候,就继续蒙。
4。扫雷的高级技巧也是可以写到程序里去的,但是有一点麻烦,还是先写上面这些把。

#4


评论:挖“地雷”能挖出百万美金吗


  

2000-11-15 09:29:29


--------------------------------------------------------------------------------


 
     您知道吗,平时为打发时间才玩的“扫雷”游戏能够解决P对NP这一悬赏百万美金的“千禧”数学难题,日前,英国伯明翰大学数学教授凯伊公布了这一线索,不过,清华大学计算机系黄连生教授认为,解决“千禧难题”需要更新的数学概念,而不是在现有理论上大量运算。

  据悉,凯伊教授是在偶然接触到“扫雷”游戏后蹦出这一想法的,他表示:“我一向对带有数学要素的游戏感兴趣,数学和游戏是存在默契的,我突然想到在‘扫雷’后面可能有一个很棒的数学原理,如果把它放在一个更大的格子图中来玩,并决定所有地雷组合的运算,就可能解出P对NP这一难题,这样一来像计算机密码这类问题就可迎刃而解。”而美国麻省克莱数学学院已将P对NP问题和另外六个难题一起并列为“千禧难题”,还准备了100万美金的奖金。

  记者从清华大学计算机系黄连生教授处了解到,“P对NP是一个运算复杂性问题,它试图判定一些我们在短期内看似无法解决的问题,实际上存在一个相当简单的解决办法,只是尚未被我们发现。目前,我们熟知的P对NP问题就有几百个,扩展起来就更多了,因此如果P对NP问题解决了,全世界的数学家和计算机学家都要放假三天”。

  不过黄教授表示:“凯伊教授的解法只是存在可能,如果将格子放到无限大的话,从排列组合的角度讲很可能造成指数爆炸,而无法算出结果,至于密码问题,即使是P对NP问题解决了也无法破解像量子密码这样的计算机密码,所以我认为,解决‘千禧难题’需要更新的数学概念,而不是在现有理论上大量运算。”(本文采写樊宏)

#5


FT! 
上面两篇报道中的记者对P,NP是什么都不知道,就在那里胡说八道:(

#6


不过数学家为扫雷设大奖确有此事

#7


什么NP啊,那么麻烦干吗?用下面的算法就够了。

以下算法,在葛永的自动扫雷软件中获得

简单推理
简单推理有两条:

1.点开(common dig).例:若某一格里是数字2,而它周围正好有2个已标为雷的格子,则点开该格子.
2.标记(common mark).例:若某一格里是数字4,而它周围可能是雷的格子(未知,已标为雷)总共只有4个,则将它周围未知的格子标为雷.

高级推理

砀呒锻评硪灿辛教?
1.最多-最少-点开(Most-Least-Dig for A,B).设有相邻关系的两个格子中分别写着数字A和B.设仅和A相邻的区域为NA,仅和B相邻的区域为NB,和A,B都相邻的区域为PAB.A区域中标为雷的和未知的共有a个格子,B区域中标为雷的有b个格子.推理:看格子A.既然PA区域中最多只有a个雷,因此PAB区域中至少有A-a个雷.再看格子B.既然PAB区域中至少有A-a个雷,再加上PB区域中的b个雷,那么我们已知的B周围的雷已经有了A-a+b个了.若A-a+b=B,那么我们就知道B周围的所有雷了:PAB区域中有A-a个,PB区域中有b个.因此,PB区域中未标为雷的未知格子不可能是雷,可以把它们全部点开!

2.最少-最多-标记(Least-Most-Mark for A,B).设有相邻关系的两个格子中分别写着数字A和B.设仅和A相邻的区域为NA,仅和B相邻的区域为NB,和A,B都相邻的区域为PAB.A区域中标为雷的有a个格子,B区域中标为雷的和未知的共有b个格子.推理:看格子A.既然PA区域中已有a个雷,因此PAB区域中最多有A-a个雷.再看格子B.既然PAB区域中最多有A-a个雷,而PB区域中最多有b个雷,因此B周围最多有A-a+b个雷。若A-a+b=B,那么我们就知道B周围的所有雷了:PAB区域中有A-a个,PB区域中有b个.因此,PB区域中未标为雷的未知格子一定是雷,可以把它们全部标为雷!

高级推理分为三个部分(每个部分分别使用上面两条高级推理规则):四邻推理(4-neighbour reasoning)、角上四邻推理(corner-4-neighbour reasoning)和外部16邻推理(outer-16-neighbour reasoning)。如下图:
     #           # #            #####
    #*#           *             #   #
     #           # #            # * #
                                #   #
                                #####
    4-邻       角上4-邻       外部16-邻

其中*是指一对接受推理的格子中的一个(就是上面的A),#是另一个格子(就是上面的B)相对于*可能的位置。

试验表明,简单推理加上4-邻高级推理可以解决90%以上的问题。简单推理加上所有高级推理可以解决几乎所有问题(但是外部16-邻推理的速度要比其他慢一些)。

#8


我觉得相对而言最困难的地方是点到一个四周雷数为0的方格,
这里用递归比较方便吧

#9


saint001(saint001),你贴的两篇报道信息量不足,能否详细介绍一下?

#10


到下面几个地方看一下
http://www.claymath.org/prizeproblems/milliondollarminesweeper.htm

http://www.mat.bham.ac.uk/R.W.Kaye/minesw/ordmsw.htm

http://www.wschnei.de/puzzles/minesweeper.html

也许都不是官方网址

#11


gz

#12


谢谢,我用了简单推理加四邻推理,效果不错,不过16邻是怎么弄的?

还有我写点到空块向四周扩散的函数时用递归总会遗漏,最后只要用穷举遍历做了

#13


16邻和4邻的差不多,我做这个的时候没用递归,我是反复按行列检查每个格的状态,直到不再有任何一个格的状态发生变化,
这是我以前做的扫雷的程序
http://download.enet.com.cn/file/game/puzzles/2001022601.shtml
需要的源代码的话,可以给你

#14


不明白。

#15


寒冰同志的扫雷程序我用了。好像成功的纪律很小。