Description |
在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。 你的任务是,对于给定的N,求出有多少种合法的放置方法。 |
Input |
共有若干行,每行一个正整数N≤10,表示棋盘和皇后的数量;如果N=0,表示结束。
|
Output |
共有若干行,每行一个正整数,表示对应输入行的皇后的不同放置数量
|
其实我使用了很多的方法,但是都是超时,所以只能使用打表的方法了。
首先如果你要打表就要使用,一个特别准确的程序把所有的结果都计算出来,由于只有10个测试属于,这样就一定要打表啊!!!
我一开始用的是回溯法,这是经典中的经典了,还是堪称经典。
我的思想就是,如果这个位置符合没有被原来的皇后攻击,我就继续走下去,如果能被攻击到,后面的就不用计算了,换一下位置
如果所有的位置都不符合,就改变前一个皇后的位置,再次的计算,知道把所有的结果都计算出来。
其实我那时候看到这个程序没有过,所以我就改进了一下这个程序。
我使用二维数组进行判断,就把一个for循环去掉了,这样可以改进一下算法。
其实还是有一个方法的比上面的方法还要快,还要优化的。
其实我最后的代码并不是这样写的,虽说是打表,但是我没有把所有的数据都计算出来,我在main定义一个数组,把每次计算的
的数字都保存下来,如果测试数据中有原来出现过的数据,就直接调用这个数组中的结果就可以了,这样就不用在进行运算了,这也是一种方法