用递归求n皇后问题
2021/4/17 18:25:15
本文主要是介绍用递归求n皇后问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
此问题是指在n*n的国际象棋棋盘上 ,放置n个皇后,使得这n个皇后均不在,同一行,同一列,同一对角线上,求出合法的方案的数目。
本题可以简单转化为就是求n的全排列中的数放在棋盘上使得这几组数,符合均不在同一对角线上。
index代表列数,正序排列。
#include<cstdio> #include<cmath> const int maxn = 1000; int count = 0, n, p[maxn], hashTable[maxn] = {false}; void generatep(int index) { if (index == n + 1) { bool flag = true; for (int i = 1; i <= n; i++) { for (int j = i + 1; j <= n; j++) { if (abs(i - j) == abs(p[i] - p[j])){//判断是否在一条对角线上 flag = false; break; } } } if (flag) count++; return;//返回上一级递归。 } for (int x = 1; x <= n; x++) { if (hashTable[x] == false) {//第x行还没被占用的时候 p[index] = x; //第index列的行号是x hashTable[x] = true; //第x行已经被占用了。 generatep(index + 1); //你完全相信递归可以做到,将其他的列补完。 hashTable[x] = false; //还原 } } } int main() { scanf("%d", &n); int index = 1; generatep(index); printf("%d", count); return 0; }
这篇关于用递归求n皇后问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-19永别了,微服务架构!
- 2024-05-15鸿蒙生态设备数量超8亿台
- 2024-05-13TiDB + ES:转转业财系统亿级数据存储优化实践
- 2024-05-09“2024鸿蒙零基础快速实战-仿抖音App开发(ArkTS版)”实战课程已上线
- 2024-05-09聊聊如何通过arthas-tunnel-server来远程管理所有需要arthas监控的应用
- 2024-05-09log4j2这么配就对了
- 2024-05-09nginx修改Content-Type
- 2024-05-09Redis多数据源,看这篇就够了
- 2024-05-09Google Chrome驱动程序 124.0.6367.62(正式版本)去哪下载?
- 2024-05-09有没有大佬知道这种数据应该怎么抓取呀?