本人最近在网上看到这个问题:
在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
要求用递归法实现.
在网上也找到一些算法,但是有些问题看不懂,网上的思路是:数组a、b、c分别用来标记冲突,a数组代表列冲突,从a[0]~a[7]代表第0列到第7列。如果某列上已经有皇后,则为1,否则为0。
数组b代表主对角线冲突,为b[i-j+7],即从b[0]~b[14]。如果某条主对角线上已经有皇后,则为1,否则为0。
数组c代表从对角线冲突,为c[i+j],即从c[0]~c[14]。如果某条从对角线上已经有皇后,则为1,否则为0。
数组a我能看懂,但是b和c为什么要设成15个元素却看不明白,希望高手指点一下 谢谢~~~~~~~~
在8×8格的国际象棋盘上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
要求用递归法实现.
在网上也找到一些算法,但是有些问题看不懂,网上的思路是:数组a、b、c分别用来标记冲突,a数组代表列冲突,从a[0]~a[7]代表第0列到第7列。如果某列上已经有皇后,则为1,否则为0。
数组b代表主对角线冲突,为b[i-j+7],即从b[0]~b[14]。如果某条主对角线上已经有皇后,则为1,否则为0。
数组c代表从对角线冲突,为c[i+j],即从c[0]~c[14]。如果某条从对角线上已经有皇后,则为1,否则为0。
数组a我能看懂,但是b和c为什么要设成15个元素却看不明白,希望高手指点一下 谢谢~~~~~~~~
解决方案 »
- C#能够开发出在安卓系统中运行的应用么?
- C# Datagridview 使用 CurrentRow取到null的奇怪问题
- 如何实现 在关闭子窗口后自动设置调用窗口的一些参数?
- sql语句中起始时间问题
- 紧急求助:C#.net中Session值传不到其它页面。高分求解,在线等候
- c#中一个Oracle的日期插入问题?在线等,急
- C#中如何计算某个函数的执行时间?
- vs.net 2005 数据源问题
- 为什么不能在ASP.NET2.0里面显示IIS默认网站下面的目录?
- media player SDK里面的例子在.net2003下面编译出错 求解~~
- 句柄?虾米东东?高手多指教啊,先谢过了。
- MD5加密后的数据不能被支付宝确认
| 7(y)-7 0 7(x)| -7
这里面,如果要表示经过(0,-7),倾斜角为145度的直线,写成方程就是y=-x-7,换句话说,只要某个点满足x+y=-7的时候,这个点就在这条直线上。如果要把这条直线表示为0号线,那么就是x+y+7=0(编号),你同样可以推出,1号线只要满足x+y+7=1,2号线满足x+y+7=2……现在来看看象棋的棋盘编号
0 7(i)7(j)
很明显的,你会发现这里i=x,j=-y,所以,通过坐标系的变化,我们得出了,0号线满足
x-(-y)+7=0,1号线满足x-(-y)+7=1,2号线满足x-(-y)+7=2……,代入i和j,得出0号线满足
i-j+7=0,1号线满足i-j+7=1,2号线满足i-j+7=2……将这个线的编号纳入数组,就表示数组0到14的元素。