八皇后问题(三)
思路:
用递归实现,既然是深度优先搜索,采用回溯思想,一般都可以用递归来实现。
代码:
#include<stdio.h>
#include<math.h>
int a[512] = {0};
int n;
int sum;
int check_queen(int a[], int n)
{
for (int i = 1; i < n; i++)
if (fabs(n - i) == fabs(a[n] -a[i]) || a[i] == a[n])
return 0;
return 1;
}
/*
*采用递归的方式实现
*
*/
void third_queen(int i)
{
for (int j = 1; j <= n; j++) {
a[i] = j;
if (check_queen(a, i)) {
if (i >= n) {
printf("一共有%d个皇后\n", ++sum);
for (int m = 1; m < n; m++) {
printf("%d\n", a[m]);
}
} else{
third_queen(i + 1);
}
}
}
}
int main()
{
printf("请输入几皇宫问题");
scanf("%d", &n);
third_queen(1);
}
结果: