n皇后问题--拉斯维加斯
来源:互联网 发布:豪迪群发软件 编辑:程序博客网 时间:2024/04/30 00:18
#include "iostream"#include "cmath"#include "cstdlib"#include "ctime"using namespace std;class Queen{public: friend void nQueen(int);private: int *x, *y; //解向量 int n; //皇后个数 bool place(int k); //检查皇后位置合法性 bool QueenLV();};bool Queen::place(int k){ for(int i=1; i<k; i++) if(abs(x[i]-x[k])==abs(i-k) || x[i]==x[k]) return false; return true;}bool Queen::QueenLV(){ //RandomNumber rnd; int k = 1; //记录下一个放置的皇后 int count = 1; //记录当前要放置的第k个皇后在第k行的有效位置数 while(k<=n && count>0) { count = 0; for(int i=1; i<=n; i++) { x[k] = i; if(place(k)) y[count++] = i; //第k个皇后的第k行的有效位置存于y数组 } if(count > 0) x[k++] = y[rand()%count]; //从有效位置中随机取一个放置皇后 } return count > 0; //放置成功}void nQueen(int n){ Queen queen; //初始化 queen.n = n; queen.x = new int[n+1]; queen.y = new int[n+1]; bool success = false; while(!success) //反复调用放置n皇后的拉斯维加斯算法,直到调用成功 { memset(queen.x, 0, sizeof(queen.x)); memset(queen.y, 0, sizeof(queen.y)); if(queen.QueenLV()) { success = true; for(int i=1; i<=n; i++) cout << queen.x[i] << " "; } }}int main() { srand(time(NULL)); cout << "输入皇后个数:"; int n; cin >> n; nQueen(n); cout << endl << endl; return 0;}
0 0
- n皇后问题--拉斯维加斯
- 拉斯维加斯之n皇后问题
- 拉斯维加斯算法求n皇后问题
- 拉斯维加斯算法和N皇后问题
- 八皇后问题(拉斯维加斯随机化)
- n皇后的拉斯维加斯回溯算法
- 拉斯维加斯算法结合八皇后问题
- N后问题(拉斯维加斯算法)
- n后问题2.0(拉斯维加斯随机算法)
- 八皇后 拉斯维加斯算法
- N*N皇后问题
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- java实现的n后问题体现拉斯维加斯算法
- N皇后问题
- n皇后问题
- N皇后问题
- N 皇后问题
- Wireshark 网络抓包工具介绍、应用及一个案例
- udp组播试验-C语言
- SpannableString中的LinkMovementMethod和ClickableSpan的实现安卓可点击有颜色文字使用
- Android Studio for Ubuntu 14.04 无法输入中文解决办法
- socket传输文件例子
- n皇后问题--拉斯维加斯
- 【颜色空间】CLElab颜色空间
- 黑马程序员——Eclipse快捷键总结
- Unknown class ViewController in Interface Builder file.
- Activity生命周期之stop和restart Activity
- JSON特殊字符处理
- 关于Git 的 SSH 的生成
- 简单的折半查找
- udp单播-广播-组播-python例子