n皇后问题
2015-12-05 10:18
429 查看
#include <iostream> #include <fstream> #include <queue> #include <cmath> using namespace std; const int MAX = 10; int n; // 皇后个数 int bestx[MAX]; //解向量 class Node { public: int dep; //当前层 int *x; //解向量 Node(int d) { x = new int[n+1]; dep = d; } bool ok() //是否满足条件 { for(int i=1; i<dep; i++) if(x[i] == x[dep] || abs(x[i] - x[dep]) == abs(i - dep)) return false; return true; } }; void search() { queue<Node> q; Node enode(0); for(int j=1; j<=n; j++) enode.x[j] = j; while(true) { if(enode.dep == n) { copy(enode.x, enode.x+n+1, bestx); break; } else { for(int i=enode.dep+1; i<=n; i++) { Node now(enode.dep+1); copy(enode.x, enode.x+n+1, now.x); now.x[now.dep] = enode.x[i]; now.x[i] = enode.x[now.dep]; if(now.ok()) q.push(now); } } if(q.empty()) break; else { enode = q.front(); q.pop(); } } } int main() { cout << "输入皇后个数:"; cin >> n; search(); cout << "\n皇后的放置方案为:" << endl; for(int i=1; i<=n; i++) cout << bestx[i] << " "; cout << endl; cout << endl; return 0; }
相关文章推荐
- 迄今为止最浮夸的代码编辑器插件
- 端口简介
- sql语句中trim
- ubuntu下安装bochs遇到的问题
- 静态图—类图、包图、对象图(2)
- Android自定义Toast取代系统的Toast
- 44.封装类实现异步加载图片
- 运动员最佳匹配问题
- SaltStack实践(二)-- 安装配置Keepalived
- Contiki OS 数据包接收流程分析
- CCBPM关于工作流引擎授权功能说明
- js实现数字分页
- 《一,二维数组》
- 最小重量机器设计问题
- 无向图的最大割问题
- WebSocket在web上的应用
- JS中的两个规范 CMD和AMD
- 安装Hadoop系列 — 安装JDK-8u5
- Android自定义控件
- 最小权顶点覆盖问题