level 7
你可以分成几个来写把
比如数组 int ar[9]; 来保存结果
ar[i] 表示 (i,ar[i]) 坐标的皇后位置。
如果那个坐标上有别的皇后的话
那就是 0 < j < i 时候 出现
i) ar[j] == ar[i]
ii) abs(j-ar[j]) == abs(i-ar[i])
然后就是递归部分
void recusion(int step)
{
___if (step == 9) retuen;
___for(int i=1;i<=8;i++)
______if (check....) recusion //进入下一个循环
}
2011年09月29日 07点09分
8
level 3
完全没必要~ 问题已经解决了 我只是忘了重置queen而已~
2011年09月29日 10点09分
9
level 6
lz
这
for (int m=12345678;m<=87654321;m++) //12345678-87654321中的数
可以把循环步长优化为9,下面就不用考虑有9和0出现了。如:
for (int m=12345678;m<=87654321;m=m+9)。
2011年09月29日 11点09分
10
level 6
我说的就是8皇后...
[12345678,87654321]范围区间中1~8的任意一个排列的数字和为9的倍数,即数字1~8的任意一个排均为9的倍数,所以可以优化循环步长...
2011年09月29日 14点09分
12
level 7
若果不限制C的话
可以用std::stack直接模拟更好
2011年10月01日 07点10分
16
level 3
你指的递归吧,我只是试下这种方法而已。。 而且问题解决了 该贴可以删了!!
2011年10月06日 14点10分
20