POJ 百练 2754 八皇后问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Since_natural_ran/article/details/52370388

http://bailian.openjudge.cn/practice/2754/

题意:虽然是汉语,但是也要好好读题。


思路:别人的思路总是轻描淡写,但是我表示很难理解。

这道题想了很久,只能说现在稍微了解。

1: 用递归去把92中排列方式以从小到大方式计算出。那么每一次都要从小开始寻找。

  而很好的是,写递归可以从小开始找,即使某一种不合适八皇后共存也会回溯重新找。

2:对于判断某一个皇后的上下左右、斜边 这个方法很巧妙,用绝对值。

#include<cstdio>
#include<cstdlib>
#include<cstring>

int ans[100][10];
int temp[10];
int num = 1;

void find_it(int i)
{
    int j,k;
    if(i == 9){
        for(j = 1;j <= 8; j++)
            ans[num][j] = temp[j];
            num++;
        return ;
    }
    for(j = 1;j <= 8; j++){
        for(k = 1;k < i; k++)
            if(temp[k] == j || abs(k - i) == abs(temp[k] - j))
                break;
        if(k == i){
            temp[i] = j;
            find_it(i+1);
        }
    }

}

int main()
{
 //   freopen("in.txt","r",stdin);
    int n;
    scanf("%d",&n);

    find_it(1);

    for(int i = 0;i < n; i++){
        int t;
        scanf("%d",&t);
        for(int j = 1;j <= 8; j++)
            printf("%d",ans[t][j]);
        printf("\n");
    }
    return 0;
}


阅读更多
换一批

没有更多推荐了,返回首页