这应该是一个非常基础的算法了 没有什么多说的,写一个专门用来判断下一步合不合法的函数就可以解决了
#include <cstdio>
bool v[8][8];
int SolveAmount=0;
bool Ok(int x,int y){
for(int i=0;i<=x;i++)if(v[i][y])return false;
int i=1;
while(x>=i&&y>=i)if(v[x-i][y-i++])return false;
i=1;
while(x>=i&&y+i<8)if(v[x-i][y+i++])return false;
return true;
}
void dfs(int n){
if(n==8){SolveAmount++;return;}
for(int i=0;i!=8;i++){
if(Ok(n,i)){
v[n][i]=true;
dfs(n+1);
v[n][i]=false;
}
}
}
int main(){
dfs(0);
printf("%d\n",SolveAmount);
return 0;
}