2008-04-24 Ruby 测试题(00014)

2008-04-24 Ruby 测试题(00014)

本周出差,没机会碰php?name=Ruby" onclick="tagshow(event)" class="t_tag">Ruby,所以晚了一点。
今天的题目依然是经典题,八皇后问题。
我们知道,在国际象棋里,皇后的攻击范围是最广的,可以攻击到同行,同列,同一对角线(主副)上的棋子。
那么,在一个8*8的棋盘上,是否可以摆放8个皇后,并使她们任意两者间都不能互相攻击到?如果可以,那么怎么摆放?
输出方式随意,只要能表达清楚即可。

等出差回去,好好写点有关回溯的东西。

本帖隐藏的内容需要回复才可以浏览
 看答案吧。


[Copy to clipboard] [ - ]
对回溯有点头大,先来个暴力算法

本帖隐藏的内容需要回复才可以浏览
就是92种解。。老师一个月前刚讲完。。。。
(旋转、翻转不算一种解的话)
哈哈,我就是那个跟老师唱反调的人,可通过旋转,翻转成为同一局面的都只能算一个解。
当然,这个是附加题了。


[Copy to clipboard] [ - ]
先贴上回溯解法

[Copy to clipboard] [ - ]
回溯的思想比较简单,是一种摸着石头过河的想法。
总结起来就是,能进则进,不能进则退,退到底就结束。
所以,一般写回溯是一个while true过程(这也就是为什么没写好就会死循环的原因)。
出口有2个,一个是找到解,一个是退到头,于是,我们应该至少看到一个break(如果需要找到全部解,那就只有一个break了)。以及一个print(打印解)。
然后,我们肯定要有“前进”的动作,这里的前进有2个意思,一个是进一步,一个是在本步上采用下一个选择。
最后,我们需要一个check方法来决定当前的摸索是否可行。
最后的最后,想一个简单点的模型来对付你要完成的事情。
还要注意,退步的时候要让现场还原。

总结一下:

[Copy to clipboard] [ - ]