POJ 百练 2754 八皇后问题

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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值