博客
关于我
N皇后问题
阅读量:261 次
发布时间:2019-03-01

本文共 1098 字,大约阅读时间需要 3 分钟。

N-皇后问题是一个经典的递归问题,常用于测试程序的深度和广度。以下是用C++实现的递归解决方案的代码解析和说明。

基本思路

N-皇后问题的目标是用最少的皇后在棋盘上占据每一行、每一列和每一条对角线。解决这个问题的常用方法是递归回溯算法。每次递归选择一个位置放置皇后,然后检查是否与已放置的皇后冲突。若没有冲突,则继续递归;否则,回溯。

代码解析

#include 
#include
using namespace std;int queen[100], n;void nqueen(int k) { if (k == n + 1) { for (int i = 1; i <= n; i++) cout << setw(4) << queen[i]; cout << endl; return; } for (int i = 1; i <= n; i++) { int j; for (j = 1; j < k; j++) if (queen[j] == i || abs(queen[j] - i) == abs(k - j)) break; if (j == k) { queen[k] = i; nqueen(k + 1); } }}int main() { cin >> n; nqueen(1);}

递归思路

  • 递归终止条件:当递归深度达到n+1时,表示所有皇后已被安置。此时,输出当前皇后位置。
  • 选择位置:从1到n的行中选择位置放置第k个皇后。
  • 检查冲突:检查当前位置是否与已放置的皇后在同一列、同一对角线或反对角线上存在冲突。
  • 回溯:如果位置安全,可放置皇后并递归解决下一个位置。
  • 优化解释

    • 递归深度:递归深度为n+1,确保能够遍历所有可能的皇后位置。
    • 检查冲突:使用绝对值检查对角线冲突,保证每一步都放置安全的位置。
    • 输出结果:在递归终止时输出全部位置,方便结果验证。

    代码改进

  • 避免全局变量:将queenn改为函数参数,提升代码的可维护性。
  • 优化循环:减少不必要的循环,提高运行效率。
  • 使用setw:确保输出格式美观,便于阅读。
  • 总结

    通过递归回溯算法,解决N-皇后问题时需要注意递归终止条件、冲突检查和回溯机制。本代码清晰地展示了这些关键点,适合用来理解递归解决复杂问题的思路。

    转载地址:http://yuux.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现hammingDistance汉明距离算法(附完整源码)
    查看>>
    Objective-C实现hanning 窗(附完整源码)
    查看>>
    Objective-C实现hanoiTower汉诺塔算法(附完整源码)
    查看>>
    Objective-C实现hardy ramanujana定理算法(附完整源码)
    查看>>
    Objective-C实现harmonic series调和级数算法(附完整源码)
    查看>>
    Objective-C实现harris算法(附完整源码)
    查看>>
    Objective-C实现HashTable哈希表算法(附完整源码)
    查看>>
    Objective-C实现haversine distance斜距算法(附完整源码)
    查看>>
    Objective-C实现heap sort堆排序算法(附完整源码)
    查看>>
    Objective-C实现heaps algorithm堆算法(附完整源码)
    查看>>
    Objective-C实现heap堆算法(附完整源码)
    查看>>
    Objective-C实现Heap堆算法(附完整源码)
    查看>>
    Objective-C实现hexagonal numbers六边形数算法(附完整源码)
    查看>>
    Objective-C实现hidden layers neural network浅层神经网络算法(附完整源码)
    查看>>
    Objective-C实现highest response ratio next高响应比优先调度算法(附完整源码)
    查看>>
    Objective-C实现hill climbing爬山法用来寻找函数的最大值算法(附完整源码)
    查看>>
    Objective-C实现Hill密码加解密算法(附完整源码)
    查看>>
    Objective-C实现histogram stretch直方图拉伸算法(附完整源码)
    查看>>
    Objective-C实现Hopcroft算法(附完整源码)
    查看>>
    Objective-C实现horizontal projectile motion平抛运动算法(附完整源码)
    查看>>