上一讲,我给大家介绍了两个经典算法面试题,即字符串匹配问题和汉诺塔游戏,这一讲,我再来给大家介绍两个经典算法面试题,它们就是八皇后问题和马踏棋盘算法,注意,马踏棋盘算法也被称为骑士周游问题哟!
接下来,我就先来给大家介绍一下八皇后问题这个经典算法面试题吧!
八皇后问题,是一个古老而著名的问题,而且还是回溯算法的一个典型案例。该问题是由国际西洋棋棋手马克斯·贝瑟尔于1848年提出的,即在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,也就是说任意两个皇后都不能处于同一行、同一列或同一斜线上,问一共有多少种摆法?
这个问题,当时一个叫高斯的人认为一共有76种方案,高斯相信大家都知道,他是一个著名的数学家,小学的时候咱们就学过高斯定律,对他有印象吧!反转来了,在1854年,柏林的象棋杂志上有不同的作者发表了40种不同的解,后来又有人用图论的方法解出了92种结果,的确,如果用图论的方式来编程实现,那么确实是有92种摆法。当然,等到计算机发明后,多种计算机语言就都可以用来解决此问题了!
注意,这里我只是想给大家简单介绍一下八皇后问题,至于具体编程实现,那就要等到后面专门讲这个八皇后问题时再来给大家写代码实现了。
刚刚好,网络上就有一款这样的八皇后在线玩的小游戏,游戏地址是https://www.novelgames.com/zh/queens/,打开该地址,你便能尽情地玩耍了!我看大家眼馋,要不接下来我给大家玩一把吧!看看我能不能在棋盘上摆出一个符合要求的八皇后摆法!不过,在玩游戏之前,我需要先给大家说明一下,就是符合要求的八皇后摆法是一共有92种,每一种摆法都让我试一下,那我肯定搞不定,但是一两种摆法我还是可以摆出来的,这一点对我来说没有任何问题啊!
打开该游戏,我来给大家玩一把,看我怎样摆出一个符合要求的八皇后摆法。当然,如果大家有兴趣,不妨自己也来玩一把!
首先,将一个皇后摆在棋盘的最左下角的那个格子。
摆好之后,那么第二行的第一个格子和第二个格子你就不能摆了,因为如果你摆了,那这两个皇后就会处在同一列或者同一斜线上,游戏自然也就无法继续玩下去了。
那第二行我们摆在哪一个格子呢?摆在第五个格子就OK了。
继续,第三行我们摆在第八个格子上。
继续,第四行我们摆在第六个格子上。
继续,第五行我们摆在第三个格子上。
继续,第六行我们摆在第七个格子上。
继续,第七行我们摆在第二个格子上。
最后一行我们摆在第四个格子上。
至此,游戏完美通关!
现在,大家应该对这个游戏感兴趣了吧!哈哈哈😄,还是挺有意思的啊,大家呢也不妨先在这里玩一玩,后续我再专门给大家去讲这个八皇后问题的回溯算法,千万不要着急哟!
下面我们再来看一个非常有意思的经典算法面试题,即马踏棋盘算法,当然,有些人也把它叫做骑士周游问题。
上一篇:云与开源,共植数字世界的根