码迷,mamicode.com
首页 > 其他好文 > 详细

N皇后问题(回溯递归思想)

时间:2020-01-27 00:21:39      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:das   def   strong   span   clu   bool   mat   穷举   ==   

八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

由此再来发展到N皇后问题

先求其解的个数://回溯算法也就是穷举法

1.每一行放一个皇后

2.放下一行的时候,进行判断:会不会出现同列,会不会出现同一斜线。斜线的判断可以归于斜率判断。

//递归回溯代码如下:
#include<iostream> using namespace std; #include<math.h> #define N 16 int n; //皇后个数 int sum = 0; //可行解个数 int x[N]; //标记皇后放置的列数 bool Agree(int k) { int i; for (i = 1; i < k; i++) if (abs(k - i) == abs(x[k] - x[i]) || x[k] == x[i]) return false; return true; } int queen(int t) { if (t > n&& n > 0) //当放置的皇后超过n时,可行解个数加1,此时n必须大于0 sum++; else for (int i = 1; i <= n; i++) { x[t] = i; //标记 if (Agree(t)) queen(t + 1); } return sum; } int main() { int t; cin >> n; t = queen(1); cout << t; return 0; }

————————————————此后补充迭代回溯的算法——————————————————

 

N皇后问题(回溯递归思想)

标签:das   def   strong   span   clu   bool   mat   穷举   ==   

原文地址:https://www.cnblogs.com/yoriko/p/12234946.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!