zoukankan      html  css  js  c++  java
  • LeetCode 回溯法 别人的小结 八皇后 递归

    #include <iostream>
    #include <algorithm>
    #include <iterator>
    #include <vector>
    
    using namespace std;
    
    int a[9] = { 0 };
    int n = 8, cnt = 0;
    
    //位置冲突算法 
    bool isConflict(int a[], int n)//a[]位置数组,n皇后个数 
    {
        int i = 0, j = 0;
    
        for (i = 2; i <= n; ++i)//i:位置 
        for (j = 1; j <= i - 1; ++j)//j:位置 
        if ((a[i] == a[j]) || (abs(a[i] - a[j]) == i - j))//1:在一行;2:在对角线上 
            return false;   //冲突 
        return true;//不冲突 
    }
    
    //八皇后问题:回溯算法(递归版) 
    void Queens8(int k) //参数k:递归摆放第k个皇后 
    {
        int i = 0;
        if (k > n)      //k>n:即k>8表示最后一个皇后摆放完毕 
        {
            printf("第%d种情况:", ++cnt);
            for (i = 1; i <= n; ++i)
                printf("%d ", a[i]);//打印情况 
            printf("
    ");
        }
        else   //8个皇后未全部摆放完毕        
        {
            for (i = 1; i <= n; ++i)//摆放第k个皇后时(转下一行) 
            { //依次从列顶端开始搜索,一直到列底端,直到找到合适位置,如果未找到,自动返回上层递归(回溯) 
                a[k] = i;
                if (isConflict(a, k))
                    Queens8(k + 1);//不冲突,递归摆放下一个皇后
            }
        }
        return;
    }
    
    //主函数 
    int main()
    {
        Queens8(1);//参数1:表示摆放第1个皇后 
        system("pause");
        return 0;
    }
  • 相关阅读:
    BeautifulSoup中的select方法
    BeautifulSoup中的find,find_all
    python中sys.stdout、sys.stdin
    python sort、sorted
    Numpy常用操作
    pandas (loc、iloc、ix)的区别
    小波变化库——Pywalvets学习笔记
    python filter()函数
    Redis数据库总结
    高逼格企业级MySQL数据库备份方案,原来是这样....
  • 原文地址:https://www.cnblogs.com/heruonan/p/8337552.html
Copyright © 2011-2022 走看看