1、问题
*在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击
*即任意两个皇后都不能处于同一行、同一列或同一斜线上,
*问有多少种摆法,并把所有合法的二维数组打印出来
*即任意两个皇后都不能处于同一行、同一列或同一斜线上,
*问有多少种摆法,并把所有合法的二维数组打印出来
2、代码实现
#include <stdio.h>
#include <stdlib.h>
/**
*在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击
*即任意两个皇后都不能处于同一行、同一列或同一斜线上,
*问有多少种摆法,并把所有合法的二维数组打印出来
*/
#define M 8
int matrix[M + 1][M + 1] = {0};
//检查这行的皇后是否与上面的行里面的皇后相冲突
//返回0就是相冲突,返回1就是不冲突,参数i,j就是
//需要检验这个皇后的下标
int is_legal(int (*matrix)[M + 1], int i, int j)
{
for (int k = 1; k <= i - 1; k++)
{
for (int l = 1; l <= M; l++)
{ //判断之前的皇后
if (matrix[k][l] == 1)
{
if (abs(i - k) == abs(j - l) || l == j)
return 0;
}
}
}
return 1;
}
//打印有能组成皇后的数组
void my_pr