回溯法之N皇后问题——C++代码
问题:N皇后问题是指在N*N的棋盘上摆放N个皇后,使得任意两个皇后都不在同一行、同一列或者同一斜线上,求满足这种摆放的解为多少个
解题思路:
(1)定义判断函数:不同行(每行只放置一个皇后);不同列(放置前进行遍历,即将放置的皇后与之前所有皇后所在列不同);不同斜线(放置前进行遍历,即将放置的皇后与之前所有皇后练成线的斜率不为±1)
(2)定义递归的回溯函数,并调用判断函数。若在该行遍历完n之前能够找到位置放置皇后,则向下一行递归,若没有位置,则向上回溯。如果棋盘所有行列寻找完毕,则解的个数+1
#include <iostream>
using namespace std;#define max 50
int x[max + 1];//第i行的皇后放在第x[i]列上int n;//棋盘宽度以及皇后数量
int sum=0;//计算解的数量//即将放入的皇后坐标为(row,col),判断是否能够放置
bool Place(int row, int col) { for (int i = 1; i < row; i++) //比较之前row -1行已经放置的皇后{if (col == x[i] || abs(row - i) == abs(col - x[i])) //判断即将放的皇后与已经存在的皇后们是否处于同一列或同一斜线return false;}return true;
}//递归的回溯函数,若满足条件则往下递归,若不满足条件,则往前回溯
void Backtrack(int t,int n) {if (t == n+1) //成功将全部棋盘遍历了一次,形成了一个解sum++;else {//若这一行遍历到n仍不能放置皇后,则向前回溯for (int i = 1; i <= n; i++) {x[t] = i;if (Place(t, x[t]))//判断是否能放置皇后Backtrack(t + 1, n);//若这一行能放置皇后,则向下一行进行递归}}
}int main()
{cout << "请输入皇后的数量: ";cin >> n;Backtrack(1,n);cout << "解的个数为: " << sum<<endl;return 0;
}
回溯法之N皇后问题——C++代码相关推荐
- 回溯法求解N皇后问题(Java实现)
回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并以此慢慢地扩大问题规模,迭代地逼近最终问题的解.这种迭代类似于穷举并且是试探性的,因为当目前的可 ...
- 回溯法求解N皇后问题及其时间复杂度分析
回溯法求解N皇后问题及其时间复杂度分析 一.回溯法简介 1. 什么是回溯法? 2. 回溯法的时间复杂度分析 蒙特卡罗方法 蒙特卡罗方法在回溯法求解时间复杂度中的应用 二.回溯法求解N皇后问题 1. 回 ...
- 回溯法解决n皇后问题
回溯法解决n皇后问题 题目要求: 在n×n格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子.n后问题等价于在n×n格的棋盘上放置n个皇后, ...
- n皇后问题python_Python:回溯法解N皇后问题
这个算法采用的是一维数组,皇后个数即数组长度,数组值即对应行皇后所在的列. 按照每行至上而下,每一行从第一列起尝试放置皇后,每次仅需判断对于已经放置的皇后是否产生冲突.如果某个位置可以放置,则放置皇后 ...
- 栈(Stack)的应用—试探回溯法:八皇后问题、迷宫寻径
栈的应用 试探回溯法 1.八皇后问题 皇后类 struct Queen { //皇后类int x, y; //坐标Queen (int xx = 0, int yy = 0 ) : x(xx), y( ...
- 回溯法(八皇后问题)及C语言实现
回溯法,又被称为"试探法".解决问题时,每进行一步,都是抱着试试看的态度,如果发现当前选择并不是最好的,或者这么走下去肯定达不到目标,立刻做回退操作重新选择.这种走不通就回退再走的 ...
- 回溯法n后问题(具体代码实现,详细分析)
目录 1.什么是n后问题 2.n后问题解析. 3.代码实现: 1.什么是n后问题: 1.问题描述 在nxn格的棋盘上放置彼此不受攻击的n个皇后.按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或 ...
- 【回溯法】八皇后问题
问题描述 在国际象棋棋盘(8×8)(8\times8)(8×8)上放置八个皇后,要求每两个皇后之间不能直接吃掉对方. 皇后可以攻击处于同一行.同一列和同一对角线上的棋子. 思路分析 八皇后问题可以使用 ...
- 七十八、 回溯法解决八皇后问题
@Author:Runsen 八皇后问题 八皇后问题是一个以国际象棋为背景的问题:如何能够在8×8的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后. 来自百度百科,皇后的走法是可 ...
最新文章
- 机器学习、数据挖掘及其他
- C 语言编程 — 程序的编译流程
- 程序员如何用Java排序
- line-height的一点见识
- POJ3585-Accumulation Degree【树形dp,二次扫描与换根法】
- js-----Date==字符串
- 链接学习之obj文件探索
- python函数执行shell_6方法,python中执行shell命令
- cdsn 最大分类数相关
- Ps如何把背景图片拉长并不变形!
- iMeta | 南医大陈连民/孔祥清等综述从基因组功能角度揭示肠菌对复杂疾病的潜在影响...
- mybatis like的两种写法
- Chromium for mac(谷歌浏览器)V89.0.4336.0官方最新版
- x264学习(2)——x264命令行参数解释
- Java web软件推荐
- 程序员应该怎么接私活?
- cisco 3560 QOS配置
- MySQL挑战:建立10万连接
- linux 开发设计软件,在Linux平台下开发和设计聊天软件
- 对话翻译官-实时语音对话翻译