• N皇后递归


    问题:

    n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在 n*n的棋盘上,互相不能攻击,输出全部方案。

    #include <iostream>
    using namespace std;
    int N;
    int queuePos[100];//用来描述每一个皇后所摆的列数
    void NQueue(int k);
    int main()
    {
        cin >> N;
        NQueue(0);
        getchar();
        getchar();
        return 0;
    }
    void NQueue(int k)
    {
        int i;
        if (k==N) {
            for (i = 0; i < N;i++) {
                cout << queuePos[i] + 1 << ' ';
            }
            cout << endl;
        }
        for (i = 0; i < N;i++) {//在0~k-1行皇后摆放好的情况下,摆第k行及其后面的皇后,摆在第i列上
            int j;
            for (j = 0; j < k;j++) {//与前k-1个皇后进行比较
                if (queuePos[j]==i||abs(queuePos[j]-i)==abs(k-j)) {//摆第k行皇后,与第j行皇后行号进行对比
                    break;
                }
            }
            if (j==k) {//比较结束,列号写入,递归第k+1个皇后
                    queuePos[k] = i;
                    NQueue(k + 1);
            }
        }
    }
    

    其实递归就是另一种循环,因为不能写不定循环,所以用递归解决。

  • 相关阅读:
    time模块
    日期和时间
    异常和函数
    finally子句
    自定义异常
    异常中的else
    全捕捉
    排序算法---希尔排序
    排序算法---直接插入排序
    排序算法---快速排序
  • 原文地址:https://www.cnblogs.com/xyqxyq/p/10211377.html
Copyright © 2020-2023  润新知