N皇后
在国际象棋中,皇后是最厉害的棋子,可以横走、直走,还可以斜走。棋手马克斯·贝瑟尔 1848 年提出著名的八皇后问题:即在 8 × 8 的棋盘上摆放八个皇后,使其不能互相攻击 —— 即任意两个皇后都不能处于同一行、同一列或同一条斜线上。
算法思想:
使用回溯法,判断N*N二维数组的每个位置,放入皇后‘Q’,最后将满足条件的二维数组输出。
关键算法:
int f(int x, int y, char a[][1000]){
//判断是否可以放入皇后,可以则返回1(执行),否则返回0(不执行)
int x1, i, y1 = y, m;
for (i = y - 1; i >= 0; i--){
x1 = 0, y1 = i;
m = y - y1;
while (a[y1][x1] != 'Q')//找出二维数组前面放入‘Q’的位置
x1++;
if (x1 == x)//同一列上返回0
return 0;
if (x1 - m == x || x1 + m == x)//同一条斜线上返回0
return 0;
}
return 1;
}
int s(int x, char a[