#include <iostream> #include <vector> using namespace std; void backtrack(int, vector<int>, int, int); bool place(int, vector<int>); void displayqueen(vector<int>, int, int); int sum = 0; int main(void) { int N; int kind; cout<<"请输入皇后的个数:"; cin>>N; vector<int> x(N+1,0); cout<<"----------------------------------"<<endl; cout<<'\t'<<"结果显示的形式:"<<endl; cout<<'\t'<<" 1.直接形式."<<endl; cout<<'\t'<<" 2.矩阵形式."<<endl; cout<<"----------------------------------"<<endl; cout<<"请输入你想显示结果的形式:"; cin>>kind; backtrack(1, x, N, kind); return 0; } void backtrack(int t, vector<int> x, int N, int kind) { if(t > N) { sum += 1; displayqueen(x, N, kind); } else { for(int i=1; i<N+1; i++) { x[t] = i; if(place(t, x)) { backtrack(t+1, x, N, kind); } } } } bool place(int k, vector<int> x) { for(int j=1; j<k; j++) { if((abs(k-j) == abs(x[k]-x[j])) || (x[k] == x[j])) { return false; break; } } return true; } void displayqueen(vector<int> x, int N, int kind) { if(kind == 1) { cout<<"第"<<sum<<"个解:"; for(int i=1; i<N+1; i++) { cout<<x[i]<<' '; } cout<<endl; } else { vector<vector<int> > S(N+1, vector<int>(N+1)); for(int i=1; i<N+1; i++) { for(int j=1; j<N+1; j++) { S[i][j] = 0; } } for(i=1; i<N+1; i++) { for(int j=1; j<N+1; j++) { S[i][x[i]] = 1; } } cout<<"第"<<sum<<"个解:"<<endl; for(i=1; i<N+1; i++) { for(int j=1; j<N+1; j++) { cout<<S[i][j]<<' '; } cout<<endl; } } }









- jiay90872013-01-02不错的 可以运行 谢谢楼主分享啊 收下好好学习下了啊~~~
- 粉丝: 1
- 资源: 5

我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
已下载
下载帮助



