回溯算法之n皇后问题
来源:互联网 发布:单片机pwm模块长啥样 编辑:程序博客网 时间:2024/06/08 10:42
n皇后问题
输出8皇后问题所有结果。
输入
n:棋盘的行列
输出
每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。
输入样例
8
输出样例
输出的前几行:
No 1:
A…….
….A…
…….A
…..A..
..A…..
……A.
.A……
…A….
No 2:
A…….
…..A..
…….A
..A…..
……A.
…A….
.A……
….A…
#include <iostream>//#include "Queen.h"#include <cmath>using namespace std;//int main() {// int n;// cin >> n;// int* x = new int[n + 1];// for (int i = 0; i <= n; i++) {// x[i] = 0;// }//// Queen queen = Queen(n, x);// queen.BackTrack(1);//// for (int i = 1; i <= n; i++) {// cout << x[i] << " ";// }// cout << endl;// cout << queen.getSum() << endl;// delete[] x;//// return 0;////}const int n = 8;int X[n+1]; //当前解 x[i] 表示第i个皇后放在第i行 第x[i]列int sum = 0;char A[n+1][n+1] = { 0 };void output();void BackTrack(int i);int main() { for (int i = 1; i <= n; i++) { X[i] = 0; } for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { A[i][j] = '.'; } } BackTrack(1);// cout << sum<<endl; return 0;}void output() { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { cout << A[i][j]; } cout << endl; }}bool isPlace(int k) { //判断第k个皇后是否可以放在第k行、第X[k]列 //k肯定和i不相同,即行数不会相同 //判断列x[i] != x[k] //判断对角线 直角等腰三角形 |行差| == |列差| for (int i = 1; i < k; i++) { //每行检查 if ((X[i] == X[k]) || (abs(i - k) == abs(X[i] - X[k]))) { return false; } } return true;}void BackTrack(int i) { //回溯查找, if (i > n) // 节点数为n层 { sum++; cout << "No " << sum << ":" << endl; for (int i = 1; i <= n; i++) { A[i][X[i]] = 'A'; } output(); for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { A[i][j] = '.'; } } } else { for (int j = 1; j <= n; j++) { //遍历每行的n个节点 X[i] = j; //第i个皇后处在第j列 if (isPlace(i)) { //如果可以放 BackTrack(i + 1); } } }}
0 0
- 回溯算法之 N皇后问题
- 回溯算法之N皇后问题
- 回溯算法之n皇后问题
- 经典回溯算法之N皇后问题
- 回溯算法之N皇后问题
- 经典回溯算法之n皇后问题
- c++算法之回溯 八皇后延伸 N皇后问题
- 回溯算法n皇后问题
- 回溯算法之N皇后问题的求解
- 回溯算法经典应用之—N皇后问题 (Java)
- 算法分析与设计回溯法之n皇后问题
- 求 N 皇后问题回溯算法
- n皇后问题——回溯算法
- 回溯算法—n皇后问题
- 求 N 皇后问题回溯算法
- N皇后问题——回溯算法
- php回溯算法解决n皇后问题
- 回溯算法与N皇后问题
- 简单远程控制源代码(c)
- elasticsearch JAVA客户端操作---索引的CURD
- 3.4
- 【Android开发】图形图像处理技术-常用绘图类之Paint类
- 将Eclipse中的项目迁移到Android Studio 中
- 回溯算法之n皇后问题
- 选择排序
- PCB过孔对信号传输的影响
- 了解lua setmetatable和__index的小例子
- 3.5
- UIImagePickerController
- Linux: 操作系统
- error C4996: 'setmode': The POSIX name for this item is deprecated解决方案
- 线程(创建线程)