回溯算法:
void backtrack(int t){
int i;
if(t>n){
sum++;
for(i=1;i<=n;i++){
cout<<x[i]<<" ";
}
cout<<endl;
}
else for(i=1;i<=n;i++){
x[t]=i;
if(place(t)) backtrack(t+1);
}
}
判断是否有冲突
abs(t-i)==abs(x[i]-x[t])不在同一条斜线
x[i]==x[t]不在同一行
bool place(int t){
int i;
for(i=1;i<t;i++)
{
if(abs(t-i)==abs(x[i]-x[t])||x[i]==x[t]) return false;
}
return true;
}
主函数
int main(){
cout<<"请输入皇后的个数:"<<endl;
cin>>n;
backtrack(1);
cout<<"总共有"<<sum<<"种";
}