当 1848 年国际象棋玩家 Max Bezzel 提出八皇后问题(eight queens puzzle)时,他恐怕怎么也想不到,100 多年以后,这个问题竟然成为了编程学习中最重要的必修课之一。八皇后问题听上去非常简单:把八个皇后放在国际象棋棋盘上,使得这八个皇后互相之间不攻击(国际象棋棋盘是一个 8×8 的方阵,皇后则可以朝横竖斜八个方向中的任意一个方向走任意多步)。虽然这个问题一共有 92 个解,但要想徒手找出一个解来也并不容易。下图就是其中一个解:
八皇后问题有很多变种,不过再怎么也不会比下面这个变种版本更帅:请你设计一种方案,在一个无穷大的棋盘的每一行每一列里都放置一个皇后,使得所有皇后互相之间都不攻击。具体地说,假设这个棋盘的左下角在原点处,从下到上有无穷多行,从左到右有无穷多列,你需要找出一个全体正整数的排列方式 a1, a2, a3, … ,使得当你把第一个皇后放在第一行的第 a1 列,把第二个皇后放在第二行的第 a2 列,等等,那么任意两个皇后之间都不会互相攻击。
下面给出一个非常简单巧妙的构造。首先,我们给出五皇后问题的一个解。并且非常重要的是,其中一个皇后占据了最左下角的那个格子。
接下来,我们把五皇后的解扩展到 25 皇后,而依据则是五皇后本身的布局:
这样一来,同一组里的五个皇后显然不会互相攻击,不同组的皇后之间显然也不会互相攻击,这便是一个满足要求的 25 皇后解了。注意到,在扩展之后,之前已经填好的部分并未改变。
再接下来怎么办呢?没错,我们又把 25 皇后的解复制成五份,再次按照五皇后的布局来排列,从而扩展到 125 皇后!
像这样不断地根据已填的部分,成倍地向外扩展,便能生成一个无穷皇后问题的解。
这个解法收录在了 Proofs without Words 一书中。
这东西是不是就是走“马”呢。
拿个象棋里的马,想怎么走就怎么走
:)
hadoop好烦啊……
这个算分形吗
为啥一定要五皇后?八皇后的解没有占据左下角的么?
LS……我觉得是因为五皇后是最小的,能看得清楚一点?
其实吧,我感觉还是一开始的八皇后问题经典
分形无敌了……
5皇后要求左下角是为了确定那些ai吧,如果不在中间迭代之后就不知道在哪里了……
而且4皇后这么构造会在一条斜边上互相攻击
所以“不同组的皇后之间显然也不会互相攻击”没那么显然。。
叫分形皇后更酷些
前排
图画错了吧,右上角那两个大灰色方块在纵向上是有重叠的。
回复:谢谢提醒,已改正
沿着y=2x方向摆成一条直线,应该也行,反正坐标是无限的。
我记得八皇后问题好像是高斯提出的耶。。
“不同组的皇后之间显然也不会互相攻击”
这个并不显然啊,像125皇后这样左起第二组和第三组之间不会攻击不是显然的吧。
@12a
n皇后问题是指在nxn的棋盘上放n个皇后
@15
确实说明任意两个皇后不在同一斜线上不是那么明显,不过确实如此
用这样的方式向上下左右四个方向扩展也行吧?
00010
10000
00100
00001
01000
同问
不同组的皇后之间显然也不会互相攻击
这个不显然吧,看不出怎么证明不同组的斜线上不会攻击。
是显然的,每次扩展一次,就把大的看成另一个维度上的小的,既然大的之间都不会相互攻击,小的之间必然不会。或者你把5皇后的棋盘的每个格子均分成N*N份,然后在放皇后的格子里随便挑出一份,看它会不会跟另一个放皇后的格子里的子格子冲突。
那么任意皇后的任意解都能扩展么?
并不是分形,尽管有分形的意思。分形要求无限放大仍维持结构,但这无穷皇后显然不能如此。
另外,求问无穷皇后问题有无穷个解吗?所有的解都是这样”类分形”结构吗?
像五子棋中的“八卦阵”
另外,是分形啊,你可以把第二个图看成第一个图的放大,第三个看成第二个的放大~
这个‘有分形意思’的图形……让我想到数独欸
不同组不会互相攻击这个结论不能说是显然的
但是对于这个5皇后构成来讲是对的
如果说不同组会互相攻击到,由于攻击路线是45度斜线,所以攻击范围至多就是,以组的大小为单位,从这组出发的斜线(这显然不可能有其他组),以及斜线上下左右这些格子,换句话说,被攻击的组一定紧靠在这个斜线边上
那么如果这样可以攻击到,把这个组沿斜线方向移动到那个组边上(移哪个效果都一样),也必然可以攻击到(仅限斜线方向),但是本题的构成,你把一个组边上放另一个组,斜线方向是无法攻击到的,所以可以推出组合组之间也无法攻击到
但是对于其他构成甚至其他数量的皇后作为元素的情况,就不太好说了
这里有篇文章:《N皇后问题解的构造和等价性分析》,
http://www.huangdf.com/NQP.pdf
http://www.huangdf.com/NQP.pdf
楼上说的很好!不同组不会互相攻击的确不显然,需要证明,楼上就给出了证明。
我觉得不同组不会相互攻击就是很显然的。问题的关键是5皇后有一个在(0,0)位置的解
26楼好像搞错了吧,
博主所说的这个方法,叫做分治法,
早在1986年,Abramson和Yang给出并证明了一种求N皇后问题解的分治法算法,可以构造出除了2、3、8、9、14、15、26、27、38、39外的任意N值的NQP解。
这里所讨论的N=5的情况,只是其中一种N值。
其实大家应该讨论的,应该是,为什么只有2、3、8、9、14、15、26、27、38、39这10个N值不能采用这种分治法,它们有什么特别,跟质数相关,还是跟什么相关?
此分治法的详细证明,请看:
《Construction through decomposition: a divide-and-conquer algorithm for the N-queens problem》
http://www.huangdf.com/divide_and_conquer.pdf
“这里所讨论的N=5的情况,只是其中一种N值。”这句话应该改为:
“这里所讨论的N=25情况,只是其中一种N值。”
很有启发性
无意中经过。。这里真是各种大牛的聚集地。膜拜一下!
博主你好,Proofs without Words 这书的作者是谁呢?google好多无用信息。。。
恩 博主请赐教 这个题目有点难
为啥非得分形呢?沿着对角线一直复制不行么???
楼上忘了皇后对角线也可以走,沿对角线的话(0,0)皇后就爆了
36楼所言极是
我突然发现我有头像了,乍回事。。。
怎么把这个问题扩展到全部四个象限
愁死我了
愁死我了啊
我真不会
不是用回溯么?怎么变分治了?
“不同组的皇后之间显然也不会互相攻击”没那么显然。。
“不同组的皇后之间显然也不会互相攻击” 看懂了的话挺显然的
比如25皇后中有5个5皇后,这5个5皇后相互不影响,而每个5皇后内部的5个皇后对外界的影响和包含他们的每个5皇后是一样的,所以每个皇后互不影响
company Repurposed Materials has been doing just this with the vinyl sheets from billboards. In the perfect size and shape for tarps, the old vinyl is reused as cocutrsntion tarps and by
看了Knuth在2017年的圣诞演讲。结尾部分也提到了无穷皇后问题。而且如果使用贪心法:第i个皇后在第i行,最左的不与1到(i-1)的i-1个皇后冲突的列。那么该解构成的皇后落子位置近似为两条线。这两条线的斜率分别为黄金分割率及其倒数。