N皇后问题,回溯法
来源:互联网 发布:手机电脑连接软件 编辑:程序博客网 时间:2024/04/30 23:06
#include <iostream>#include <cstdlib>#define N 15using namespace std;int n;//皇后个数int sum=0;//可行解个数int x[N];//皇后序列int place(int k){ int i; for(i=1; i<k; i++) { if(abs(k-i)==abs(x[k]-x[i])||x[k]==x[i]) return 0; } return 1;}int queen(int t){ if(t>n&&n>0) { sum++; for(int j=1; j<=n; j++) { cout<<x[j]<<" "; } cout<<endl;; } else { for(int i=1; i<=n; i++) { x[t]=i; if(place(t)) { queen(t+1); } } } return sum;}int main(){ int t; cout<<"输入皇后个数:"<<endl; cin>>n;cout<<"结果序列为:"<<endl; if(n==0) { t=0; } else t = queen(1); cout<<"共"<<t<<"组"<<endl; return 0;}