grid2754

八皇后问题,是用递归方法,下面的实现方案比较简洁。注意细节,用户的输入是从1开始的。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

using namespace std;

int ans[92][8] = {0};
int newTry[8] = {0};
int count = 0;

void getAllAns(int i)
{
    if(i == 8)
    {
        for(int m = 0;m < 8;m++)
            ans[count][m] = newTry[m] + 1;
        count++;
        return;
    }

    for(int k = 0;k < 8;k++)
    {
        int j;
        for(j = 0;j < i;j++)
        {
            if(k == newTry[j] || (i - j) == (newTry[j] - k) || (j - i) == (newTry[j] - k))
                break;
        }
        if(j == i)
        {
            newTry[i] = k;
            getAllAns(i + 1);
        }
    }
}

int main()
{
    getAllAns(0);
    int num;
    scanf("%d",&num);
    while(num--)
    {
        int n;
        scanf("%d",&n);
        for(int i = 0;i < 8;i++)
            printf("%d",ans[n - 1][i]);
        printf("\n");
    }
    return 0;
}


你可能感兴趣的:(grid2754)