您好 我回答了这个问题 **
编写一个算法来打印所有方法 在国际象棋上安排8位国王 董事会让所有人都没有 行,列,对角线
**
//initialize chess[i][j] to 0;
int king=100; //any other number except 0/1
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
//select any one position for the first column... lets start with j=0,i=0
if(chess[i][j]!=1)
chess[i][j]=king;
//now we should cross all rows with value i and column with value j
chess[i][]=1;
print(when chess[][]=king)
// we cannot enter king if chess[][]=1
}
}
如何检查对角线部分?还有如何列举所有可能的案例?
先谢谢。
答案 0 :(得分:1)
回答具体问题:
棋盘上的对角线移动总是从(m,n)到(m +/- k,n +/- k);即你在垂直方向上水平移动多个空格。因此,要检查两个皇后,一个在(i,j)和一个在(p,q)上是否对角攻击,你检查是否abs(i-p) == abs(j-q)
。
要划掉所有可以被女王(p,q)对角攻击的方格,你需要四个形式的循环
for (i = p, j = q; i >= 0, j >= 0; i--, j--) { board[i][j] = 1 }
for (i = p, j = q; i >= 0, j < 8; i--, j++) { board[i][j] = 1 }
for (i = p, j = q; i < 8, j < 8; i++, j++) { board[i][j] = 1 }
for (i = p, j = q; i < 8, j >= 0; i++, j--) { board[i][j] = 1 }
也就是说,你走在你女王的中心的四个手臂上,穿过正方形,直到你撞到了董事会的边缘。