递归,八皇后问题

#include <cstdio>
#include <iostream>
#include <cstdlib>
using namespace std;

int cnt = 0;
int n = 8;
int P[10] = {0};
bool hashTable[10] = {false};

void print()
{
    for(int i = 1; i <= n; i++)
        printf("%d",P[i]);
    printf("\n");
}

// 从第1~第n行,针对每一行放置的位置(即第几列)
// ,进行全排列,筛选符合条件的组合
void generateP(int index)
{
    if(index == n+1)
    {
        cnt++;
        print();
        return ;
    }
    for(int x = 1; x <= n; x++)
    {
        if(hashTable[x] == false)
        {
            bool flag = true;
            for(int pre = 1; pre < index; pre++)
            {
                if(abs(index-pre) == abs(x-P[pre]))
                {
                    flag = false;
                    break;
                }
            }
            if(flag)
            {
                P[index] = x;
                hashTable[x] = true;
                generateP(index + 1);
                hashTable[x] = false;
            }
        }
    }
}

int main()
{
    generateP(1);
    printf("%d",cnt);

    return 0;
}
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页