感觉是正常的递归回溯,先安排第一个王后的位置,然后第二个第三个,如果能排好所有的王后就皆大欢喜,要不就开始逐级返回,再开始排序,直到安置好所有的王后,代码如下
#include<stdio.h>
#include<math.h>
#include <stdlib.h>
#define max 8
int array[max],count=0;
//用回溯法编程实现八皇后问题求解
int judge(int n){
int i;
for(i=0;i<n;i++){
if(array[i]==array[n]||(n-i)==abs(array[i]-array[n])){
return 0;}
}
return 1;
}
void counter(){
count++;
}
void check(int n){
int i;
if(n==max){
counter();
return ;
}
for(i=0;i<max;i++){
array[n]=i;
if(judge(n)){
check(n+1);
}
}
}
int main()
{
/************ Begin ************/
check(0);
printf("%d\n",count);
/************ End *************/
return 0;